public async Task TaskCancellationManager_CancelAllTasks_Many() { var count = 100; using (var enter = new CountdownEvent(count)) using (var exit = new CountdownEvent(count)) { var mgr = new TaskCancellationManager <int>(); var tasks = new List <Task>(count); for (var i = 0; i < count; ++i) { tasks.Add(mgr.AddAndInvokeAsync(i, async token => { var tcs = new TaskCompletionSource <bool>(); using (token.Register(() => tcs.SetResult(true))) { enter.Signal(); await tcs.Task; exit.Signal(); } })); } Assert.IsTrue(enter.WaitHandle.WaitOne()); Assert.AreEqual(count, mgr.PendingOperationCount); mgr.CancelAllTasks(); Assert.IsTrue(exit.WaitHandle.WaitOne()); await Task.WhenAll(tasks); Assert.AreEqual(0, mgr.PendingOperationCount); } }
public void TaskCancellationManager_CancelledAfterCompleted() { var mgr = new TaskCancellationManager<int>(); mgr.Add(42, _ => Task.CompletedTask); mgr.Cancel(42); // Not throwing implies success }
public void TaskCancellationManager_CancelInvalidId() { var mgr = new TaskCancellationManager <int>(); mgr.Cancel(42); // Not throwing implies success }
public async Task TaskCancellationManager_CancelledAfterCompleted() { var mgr = new TaskCancellationManager <int>(); await mgr.Add(42, _ => Task.CompletedTask); mgr.Cancel(42); // Not throwing implies success }
public void TaskCancellationManager_CancelledAfterCompleted() { var mgr = new TaskCancellationManager <int>(); mgr.Add(42, _ => Task.FromResult(true)); mgr.Cancel(42); // Not throwing implies success }
internal HttpUrlConnectionNetworkFetcher(IExecutorService executorService) { _executorService = executorService; _tasks = new TaskCancellationManager <string>(); _client = new HttpClient( new HttpBaseProtocolFilter { AllowAutoRedirect = false, }); }
public async Task TaskCancellationManager_CancelledAfterCompleted() { var mgr = new TaskCancellationManager <int>(); var task = new Task(() => { }); task.Start(); await mgr.AddAndInvokeAsync(42, _ => task); mgr.Cancel(42); // Not throwing implies success }
public async Task TaskCancellationManager_CleanedUpAfterError() { var enter = new AutoResetEvent(false); var mgr = new TaskCancellationManager<int>(); var t = default(Task); mgr.Add(42, token => { return t = Task.Run(() => { enter.WaitOne(); throw new InvalidOperationException(); }); }); Assert.IsNotNull(t); Assert.AreEqual(1, mgr.PendingOperationCount); enter.Set(); await AssertEx.ThrowsAsync<InvalidOperationException>(async () => await t); Assert.AreEqual(0, mgr.PendingOperationCount); }
public void TaskCancellationManager_CancelTask() { var enter = new AutoResetEvent(false); var exit = new AutoResetEvent(false); var mgr = new TaskCancellationManager<int>(); mgr.Add(42, async token => { var tcs = new TaskCompletionSource<bool>(); using (token.Register(() => tcs.SetResult(true))) { enter.Set(); await tcs.Task; exit.Set(); } }); Assert.IsTrue(enter.WaitOne()); mgr.Cancel(42); Assert.IsTrue(exit.WaitOne()); }
public async Task TaskCancellationManager_CleanedUpAfterError() { var enter = new AutoResetEvent(false); var mgr = new TaskCancellationManager <int>(); var t = mgr.Add(42, token => { return(Task.Run(() => { enter.WaitOne(); throw new InvalidOperationException(); })); }); Assert.IsNotNull(t); Assert.AreEqual(1, mgr.PendingOperationCount); enter.Set(); await AssertEx.ThrowsAsync <InvalidOperationException>(async() => await t); Assert.AreEqual(0, mgr.PendingOperationCount); }
public async Task TaskCancellationManager_CleanedUpAfterComplete() { using (var enter = new AutoResetEvent(false)) { var mgr = new TaskCancellationManager <int>(); var t = mgr.AddAndInvokeAsync(42, token => { return(Task.Run(() => { enter.WaitOne(); })); }); Assert.IsNotNull(t); Assert.AreEqual(1, mgr.PendingOperationCount); enter.Set(); await t; Assert.AreEqual(0, mgr.PendingOperationCount); } }
public async Task TaskCancellationManager_CleanedUpAfterComplete() { var enter = new AutoResetEvent(false); var exit = new AutoResetEvent(false); var mgr = new TaskCancellationManager<int>(); var t = default(Task); mgr.Add(42, token => { return t = Task.Run(() => { enter.WaitOne(); return; }); }); Assert.IsNotNull(t); Assert.AreEqual(1, mgr.PendingOperationCount); enter.Set(); await t; Assert.AreEqual(0, mgr.PendingOperationCount); }
public async Task TaskCancellationManager_CancelTask() { var enter = new AutoResetEvent(false); var exit = new AutoResetEvent(false); var mgr = new TaskCancellationManager <int>(); var t = mgr.Add(42, async token => { var tcs = new TaskCompletionSource <bool>(); using (token.Register(() => tcs.SetResult(true))) { enter.Set(); await tcs.Task; exit.Set(); } }); Assert.IsTrue(enter.WaitOne()); mgr.Cancel(42); Assert.IsTrue(exit.WaitOne()); await t; }