Пример #1
0
    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);
    }
Пример #2
0
    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;
    }