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
        }
Example #4
0
        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
        }
Example #6
0
 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());
        }
Example #10
0
        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);
        }
Example #13
0
        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;
        }