public async Task FinallyBlock_OnCancellation_ShouldBeRun() { bool isFinallyBlockExecuted = false; async Eff Test() { try { while (await ShouldContinue()) { await Task.Delay(millisecondsDelay : 5); } async Eff <bool> ShouldContinue() => true; } finally { isFinallyBlockExecuted = true; } } using var cts = new CancellationTokenSource(1_000); var handler = new CancellationEffectHandler(cts.Token); await Assert.ThrowsAsync <OperationCanceledException>(() => Test().Run(handler).AsTask()); Assert.True(isFinallyBlockExecuted); }
public async Task Stub_CanceledToken_ShouldThrowOperationCanceledException() { async Eff <int> Test() => 42; var handler = new CancellationEffectHandler(new CancellationToken(canceled: true)); await Assert.ThrowsAsync <OperationCanceledException>(() => Test().Run(handler).AsTask()); }
public async Task CancellationTokenEffect_PassedToTask_ShouldThrowTaskCanceledException() { async Eff Test() { var token = await CancellationTokenEffect.Value; await Task.Delay(60_000, token); } using var cts = new CancellationTokenSource(1_000); var handler = new CancellationEffectHandler(cts.Token); await Assert.ThrowsAsync <TaskCanceledException>(() => Test().Run(handler).AsTask()); }
static async Task Main() { var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var handler = new CancellationEffectHandler(cts.Token); try { await Test().Run(handler); } catch (Exception ex) { Console.WriteLine(ex); } }
public async Task DivergingWorkflow_CanceledToken_ShouldThrowOperationCanceledException() { async Eff Test() { while (await ShouldContinue()) { await Task.Delay(millisecondsDelay : 5); } async Eff <bool> ShouldContinue() => true; } using var cts = new CancellationTokenSource(1_000); var handler = new CancellationEffectHandler(cts.Token); await Assert.ThrowsAsync <OperationCanceledException>(() => Test().Run(handler).AsTask()); }