public async Task AsyncOperationCancelledIfRequestedAsync() { await _taskFactory.SwitchToMainThreadAsync(); var asyncOperationStarted = new AsyncManualResetEvent(); var taskCancelled = new AsyncManualResetEvent(); var source = new CancellationTokenSource(); Task asyncOperation = _taskExecutor.SubmitAsync(async() => { asyncOperationStarted.Set(); await taskCancelled.WaitAsync(); Assert.Throws <OperationCanceledException>( () => _taskExecutor.CancelAsyncOperationIfRequested()); }, source.Token, _dummyMethodName, _dummyType); await asyncOperationStarted.WaitAsync(); source.Cancel(); taskCancelled.Set(); Assert.ThrowsAsync <TaskCanceledException>(async() => await asyncOperation); }