在活动功能中,我正在这样做
do {
await timeout(500);
} while (await getStatus() === false);
哪里
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
getStatus()
是一项执行get
请求以查看其他服务中的过程是否完成并基于此返回true
或false
的功能。
我需要我的活动功能等待其他服务中的过程完成。但是默认情况下,活动功能的执行限制为5分钟。
根据不同的情况,我的getStatus()
可能需要2-3个小时或更长时间才能返回true
。
我在这里可以做什么?有什么建议吗?
答案 0 :(得分:1)
您有两种选择:
选项A:使用监控器模式+快退
您可以将getStatus
代码拆分到另一个“活动功能”吗?如果是,则假定以下条件:
ActivityFunction_A
-在执行getStatus()
ActivityFunction_B
-包含用maximum execution time of 10 minutes轮询getStatus
的代码。
ActivityFunction_C
-在getStatus
返回TRUE
您现在可以编排工作流程顺序
ActivityFunction_A => ActivityFunction_B => ActivityFunction_C
使用Monitor模式。
由于任何一项活动功能都可能失败或超时,并且执行每个活动功能都有潜在的副作用,因此,您还应该使用Rewind功能(当前处于预览状态)来倒带和重播序列中第一个失败的活动函数。
选项B:使用应用服务计划
如果您的工作流确实不需要动态扩展到很多实例,则可以在启用App Service Plan的情况下将功能迁移到AlwaysOn。