0

我有一个 DurableOrchestrationClient 执行几个 Activity 函数在 ActivityMessage 对象上工作 - 如何在启动函数中获取更新的 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));
...

任何帮助将不胜感激

4

1 回答 1

1

简短的回答是,您无法从启动函数中的引用直接查看对 ActivityMessage 对象所做的更改。但是,有一些解决方法。

根据文档,“Orchestrator 函数和活动函数都由函数应用任务中心中的内部队列触发。” 这些队列消息包括函数的输入,分别在入队/出队时序列化/反序列化到 JSON 或从 JSON 序列化。结果,您丢失了对象引用,因此它实际上是按值传递的。

如果您只想在编排完成后查看更新的 ActivityMessage ,请在编排结束时返回您的 ActivityMessage。使用DurableOrchestrationClient.CheckStatusAsync在启动器函数中监控编排状态。编排完成后,从DurableOrchestrationStatus.Output属性检索更新的活动消息。

如果您想在编排过程中查看 ActivityMessage 的更新,您还需要使用DurableOrchestrationContext.SetCustomStatus在更新时将您的 ActivityMessage 对象输出到DurableOrchestrationContext.CustomStatus属性。

于 2018-10-31T21:45:40.040 回答