public void TaskExtensions_ValueTaskWithCancellationCompleted() { var cts = new CancellationTokenSource(); cts.Cancel(); var awaiter = new ValueTask <int>(8).AwaitWithCancellation(cts.Token).GetAwaiter(); Assert.AreEqual(true, awaiter.IsCompleted); Assert.AreEqual(8, awaiter.GetResult()); }
public void TaskExtensions_ValueTaskWithCancellationCanceled() { var tcs = new TaskCompletionSource <int>(); var cts = new CancellationTokenSource(); cts.Cancel(); var awaiter = new ValueTask <int>(tcs.Task).AwaitWithCancellation(cts.Token).GetAwaiter(); Assert.AreEqual(true, awaiter.IsCompleted); Assert.Catch <OperationCanceledException>(() => awaiter.GetResult()); }
public void TaskExtensions_ValueTaskWithCancellationFailedAfterContinuationScheduled() { var tcs = new TaskCompletionSource <int>(); var cts = new CancellationTokenSource(); var awaiter = new ValueTask <int>(tcs.Task).AwaitWithCancellation(cts.Token).GetAwaiter(); var continuationCalled = false; Assert.AreEqual(false, awaiter.IsCompleted); awaiter.UnsafeOnCompleted(() => continuationCalled = true); Assert.AreEqual(false, awaiter.IsCompleted); Assert.AreEqual(false, continuationCalled); tcs.SetException(new OperationCanceledException("Error")); Assert.AreEqual(true, continuationCalled); Assert.AreEqual(true, awaiter.IsCompleted); Assert.Catch <OperationCanceledException>(() => awaiter.GetResult(), "Error"); }
public void TaskExtensions_ValueTaskWithCancellationDefault() { var tcs = new TaskCompletionSource <int>(); var cts = new CancellationTokenSource(); var awaiter = new ValueTask <int>(tcs.Task).AwaitWithCancellation(cts.Token).GetAwaiter(); var continuationCalled = 0; Assert.AreEqual(false, awaiter.IsCompleted); awaiter.UnsafeOnCompleted(() => continuationCalled++); Assert.AreEqual(false, awaiter.IsCompleted); Assert.AreEqual(0, continuationCalled); tcs.SetResult(8); Assert.AreEqual(true, awaiter.IsCompleted); Assert.AreEqual(1, continuationCalled); Assert.AreEqual(8, awaiter.GetResult()); cts.Cancel(); Assert.AreEqual(1, continuationCalled); }