对于持久Azure功能,DurableOrchestrationClient.GetStatusAsync()始终为null

时间:2018-01-30 22:06:05

标签: azure azure-functions

我有一个使用DurableOrchestrationClient的队列触发器azure函数。我能够开始我的业务流程功能的新执行,它会触发多个活动触发器功能并等待它们全部处理。一切都很好。

我的问题是我无法检查我的业务流程功能(“TestFunction”)的状态。 GetStatusAsync始终返回null。我需要知道编排功能何时实际完成并处理返回对象(bool)。

public static async void Run([QueueTrigger("photostodownload", Connection = "QueueStorage")]PhotoInfo photoInfo, [OrchestrationClient]DurableOrchestrationClient starter, TraceWriter log)
{
     var x = await starter.StartNewAsync("TestFunction", photoInfo);
     Thread.Sleep(2 * 1000);
     var y = await starter.GetStatusAsync(x);
}

2 个答案:

答案 0 :(得分:0)

StartNewAsync将消息排入控制队列,并不意味着业务流程立即启动。

如果实例不存在或尚未开始运行,则

GetStatusAsync会返回null。所以,在你睡了2秒钟的时候,编排可能还没有开始。

您应该定期轮询业务流程的状态,或者从业务流程中发送类似Done事件的内容作为工作流程的最后一步,而不是具有固定的等待超时。

答案 1 :(得分:0)

您使用的是1.0或2.0功能吗?关于Github上的Function 2.0运行时报告了类似的问题。

https://github.com/Azure/azure-functions-durable-extension/issues/126

另外,当你说一切正常时,你的意思是activityTrigger功能完全执行吗?

您是在本地运行功能还是在Azure上部署?