问题描述
在我的活动功能中,我正在执行此操作
do {
await timeout(500);
} while (await getStatus() === false);
Where,
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
getStatus()
是一个函数,它执行get
请求以查看其他服务中的进程是否完成,并基于此返回true
或false
。
我需要我的活动函数在其他服务中的进程完成之前等待。但默认情况下,活动函数的执行时间限制为5分钟。
我的getStatus()
可能需要超过2-3个小时或更长时间才能返回true
。
我能在这里做些什么?有什么建议吗?
推荐答案
您有几个选项:
选项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:使用应用服务计划
如果您的工作流不需要动态向外扩展到许多实例,则可以在AlwaysOn打开的情况下将您的函数迁移到App Service Plan。