Как отменить действие, которое вызывается асинхронно из рабочего процесса? - PullRequest
0 голосов
/ 20 июня 2020

Мы хотим вызвать длительное действие асинхронно и через какое-то время на основании внешнего сигнала хотели бы отменить это длительное действие.

Async.procedure(activities::longRunningActivity)
// Execute some synchronous activities
Workflow.await(() -> !messageQueue.isEmpty());
if (messageQueue.remove(0) == "something") {
    // Cancel longRunningActivity
}

В настоящее время единственный способ обучения деятельности об отмене через сердцебиение. Убедитесь, что ваша активность пульсирует и не проглатывает исключение, вызванное методом heartbeat.

1 Ответ

0 голосов
/ 20 июня 2020

Используйте CancellationScope :

  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();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...