public async Task Stop_cancels_token_while_in_callback() { var callbackCanceled = false; var callbackStarted = new TaskCompletionSource <bool>(); var stopInitiated = new TaskCompletionSource <bool>(); var timer = new AsyncTimer( callback: async(time, token) => { callbackStarted.SetResult(true); await stopInitiated.Task; if (token.IsCancellationRequested) { callbackCanceled = true; } }, interval: TimeSpan.Zero); await callbackStarted.Task; var stopTask = timer.DisposeAsync(); stopInitiated.SetResult(true); await stopTask; Assert.True(callbackCanceled); }
public async Task Stop_waits_for_callback_to_complete() { var callbackCompleted = new TaskCompletionSource <bool>(); var callbackTaskStarted = new TaskCompletionSource <bool>(); var timer = new AsyncTimer( callback: (time, token) => { callbackTaskStarted.SetResult(true); return(callbackCompleted.Task); }, interval: TimeSpan.Zero); await callbackTaskStarted.Task; var stopTask = timer.DisposeAsync().AsTask(); var delayTask = Task.Delay(1000); var firstToComplete = await Task.WhenAny(stopTask, delayTask); Assert.Equal(delayTask, firstToComplete); callbackCompleted.SetResult(true); await stopTask; }