0

在我的活动功能中,我正在这样做

do {
     await timeout(500);
} while (await getStatus() === false);

在哪里,

function timeout(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
}

getStatus()是一个get请求查看其他服务中的进程是否完成并返回truefalse基于此的函数。

在其他服务中的流程完成之前,我需要我的活动功能等待。但活动功能执行默认限制为 5 分钟。根据不同的场景,我getStatus()可能需要 2-3 个小时或更长时间才能返回true

我可以在这里做什么?有什么建议吗?

4

1 回答 1

1

你有几个选择:

选项 A:使用监视器模式 + 倒带

你能把getStatus代码拆分到另一个活动函数吗?如果是,那么假设如下:

  1. ActivityFunction_A- 包含轮询的 do-while 循环之前的代码getStatus()

  2. ActivityFunction_BgetStatus-包含最大执行时间为 10 分钟的轮询代码。

  3. ActivityFunction_C- 包含getStatus返回后的代码TRUE

您现在可以编排工作流程序列

ActivityFunction_A => ActivityFunction_B => ActivityFunction_C

使用监视器模式。

由于任何一个 Activity 函数都可能失败或超时,并且执行每个 Activity 函数都有潜在的副作用,因此您还应该使用Rewind功能(当前处于预览状态)仅从第一个失败的 Activity 函数开始倒带和重播顺序。

选项 B:使用应用服务计划

如果您的工作流真的不需要动态地扩展到很多实例,您可以将您的函数迁移到启用AlwaysOn应用服务计划

于 2018-12-21T20:32:33.963 回答