cancel method
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);
}