中断长时间进行的Uber Cadence活动的正确方法是什么?

时间:2019-04-30 00:01:32

标签: cadence-workflow

如果我进行了长时间的活动,而该活动类似

func Activity(ctx context.Context) error {
    ticker := time.NewTicker(5 * time.Second)
    for {
        select {
        case <-ctx.Done():
            return ctx.Err()
        case <-ticker.C:
            if isServiceReady(ctx) {
                break
            }
        }
    }
    return nil
}

我希望能够从工作流程中取消该操作(而不会取消整个工作流程),那么我该怎么做呢?

我希望您可以在“完成的上下文”通道上接收,然后在工作流中创建可取消的上下文,但这显然没有任何作用。

1 个答案:

答案 0 :(得分:0)

目前,要取消活动,必须先跳动一下。 Cadence服务在活动心跳返回值上搭载取消状态。因此,如果您在每个刻度上开始心跳并且心跳间隔足够小(因为客户端不会在每个心跳方法调用中都调用服务),那么您的代码应该开始工作。

将来,我们计划添加带有特定于工作人员的任务列表的会话的概念,以进行取消。添加后,取消将不再依赖于心跳。