public void can_cancel_while_processing() { _bus.Subscribe <TestTokenCancellableLongRunningCmd>(this); _tokenSource = new CancellationTokenSource(); var cmd = new TestTokenCancellableLongRunningCmd(false, _tokenSource.Token); _bus.TrySendAsync(cmd); AssertEx.IsOrBecomesTrue(() => Interlocked.Read(ref _gotCmd) == 1, msg: "Command not handled"); AssertEx.IsOrBecomesTrue(() => Interlocked.Read(ref _canceled) == 1, msg: "Command not canceled"); }
public CommandResponse Handle(TestTokenCancellableLongRunningCmd command) { Interlocked.Exchange(ref _gotCmd, 1); _tokenSource.Cancel(); SpinWait.SpinUntil(() => command.IsCanceled, 500); if (command.IsCanceled) { Interlocked.Exchange(ref _canceled, 1); return(command.Fail()); } else { Interlocked.Exchange(ref _success, 1); return(command.Succeed()); } }