如何取消从Workflow异步调用的activity?
How to cancel activity that is invoked asynchronously from the Workflow?
我们想异步调用一个 long-运行 activity,并在一段时间后根据外部信号取消那个 long-运行 activity。
Async.procedure(activities::longRunningActivity)
// Execute some synchronous activities
Workflow.await(() -> !messageQueue.isEmpty());
if (messageQueue.remove(0) == "something") {
// Cancel longRunningActivity
}
目前 activity 了解取消的唯一方法是通过检测信号。确保您的 activity 心跳并且不会吞下心跳方法抛出的异常。
CancellationScope longRunningCancellationScope =
Workflow.newCancellationScope(
() -> Async.procedure(activities::longRunningActivity));
longRunningCancellationScope.run();
// Execute some synchronous activities
Workflow.await(() -> !messageQueue.isEmpty());
if (messageQueue.remove(0) == "something") {
longRunningCancellationScope.cancel();
}
我们想异步调用一个 long-运行 activity,并在一段时间后根据外部信号取消那个 long-运行 activity。
Async.procedure(activities::longRunningActivity)
// Execute some synchronous activities
Workflow.await(() -> !messageQueue.isEmpty());
if (messageQueue.remove(0) == "something") {
// Cancel longRunningActivity
}
目前 activity 了解取消的唯一方法是通过检测信号。确保您的 activity 心跳并且不会吞下心跳方法抛出的异常。
CancellationScope longRunningCancellationScope =
Workflow.newCancellationScope(
() -> Async.procedure(activities::longRunningActivity));
longRunningCancellationScope.run();
// Execute some synchronous activities
Workflow.await(() -> !messageQueue.isEmpty());
if (messageQueue.remove(0) == "something") {
longRunningCancellationScope.cancel();
}