我有一个DurableOrchestrationClient,它执行几个在ActivityMessage对象上运行的Activity函数-如何在启动函数中获取更新后的ActivityMessage对象的句柄?
例如 入门功能:
ActivityMessage am = new ActivityMessage();
var orchestrationId = starter.StartNewAsync("O_DispatchExecutor", am);
...>
[FunctionName("O_DispatchExecutor")]
public static async Task<ActivityMessage>
TaskExecutor([OrchestrationTrigger]DurableOrchestrationContext ctx, ILogger
log)
{
int index = 0; //
ActivityMessage input = ctx.GetInput<ActivityMessage>();
for (; index <= input.Rules.Count; index++) {
Rule r = input.Rules.ElementAt(index);
try
{
input = ctx.CallActivityAsync<ActivityMessage>(r.Name, input));
...
任何帮助将不胜感激
答案 0 :(得分:1)
简短的答案是,您不能直接从启动器函数中的引用中查看对ActivityMessage对象所做的更改。但是,有解决方法。
Per the documentation,“编排器功能和活动功能均由功能应用程序的任务中心中的内部队列触发。”这些队列消息包括函数的输入,它们分别在入队/出队时从JSON序列化/反序列化。结果,您丢失了对象引用,因此它可以按值有效地传递。
如果您只想在编排完成后查看更新的ActivityMessage,,则在编排结束时返回ActivityMessage。使用DurableOrchestrationClient.CheckStatusAsync.监视启动程序功能中的业务流程状态。完成业务流程后,请从DurableOrchestrationStatus.Output属性中检索更新的活动消息。
如果要在编排过程中查看对ActivityMessage的更新,则需要另外使用DurableOrchestrationContext.SetCustomStatus来将ActivityMessage对象输出为DurableOrchestrationContext.CustomStatus属性,如下所示:它会进行更新。