cancel method

  1. @override
Future<void> cancel(
  1. String runId, {
  2. String? reason,
})
override

Cancels a run and records an optional cancellation reason.

Implementation

@override
/// Cancels a run and records an optional cancellation [reason].
Future<void> cancel(String runId, {String? reason}) async {
  final state = _runs[runId];
  if (state == null) return;
  _removeWatcherForRun(runId);
  final now = _clock.now();
  final cancellationData = <String, Object?>{
    'reason': reason ?? 'cancelled',
    'cancelledAt': now.toIso8601String(),
  };
  _runs[runId] = state.copyWith(
    status: WorkflowStatus.cancelled,
    waitTopic: null,
    resumeAt: null,
    suspensionData: const <String, Object?>{},
    ownerId: null,
    leaseExpiresAt: null,
    cancellationData: cancellationData,
    updatedAt: now,
  );
  for (final entry in _due.values) {
    entry.remove(runId);
  }
  final emptyTopics = <String>[];
  _suspendedTopics.forEach((topic, set) {
    set.remove(runId);
    if (set.isEmpty) {
      emptyTopics.add(topic);
    }
  });
  emptyTopics.forEach(_suspendedTopics.remove);
}