public void CancellingInputTokenCancelsIssuedToken()
        {
            var cts = new CancellationTokenSource();

            using var series = new CancellationSeries();
            var token = series.CreateNext(cts.Token);

            Assert.False(token.IsCancellationRequested);

            cts.Cancel();

            Assert.True(token.IsCancellationRequested);
        }
示例#2
0
        public void CreateNext_ReturnsCancelledTokenIfInputTokenAlreadyCancelled()
        {
            var cts = new CancellationTokenSource();

            using (var series = new CancellationSeries())
            {
                cts.Cancel();

                var token = series.CreateNext(cts.Token);

                Assert.True(token.IsCancellationRequested);
            }
        }
示例#3
0
        public void CreateNext_HandlesExceptionsFromPreviousTokenRegistration()
        {
            using var series = new CancellationSeries();
            var token1 = series.CreateNext();

            var exception = new Exception();

            token1.Register(() => throw exception);

            var aggregateException = Assert.Throws <AggregateException>(() => series.CreateNext());

            Assert.Same(exception, aggregateException.InnerExceptions.Single());
            Assert.True(token1.IsCancellationRequested);
        }
示例#4
0
        public void CreateNext_CancelsPreviousToken()
        {
            using var series = new CancellationSeries();
            var token1 = series.CreateNext();

            Assert.False(token1.IsCancellationRequested);

            var token2 = series.CreateNext();

            Assert.True(token1.IsCancellationRequested);
            Assert.False(token2.IsCancellationRequested);

            var token3 = series.CreateNext();

            Assert.True(token2.IsCancellationRequested);
            Assert.False(token3.IsCancellationRequested);
        }
 /// <summary>
 /// Creates an instance of the TaskDelayScheduler. If an originalSourceToken is passed, it will be linked to the PendingUpdateTokenSource so
 /// that cancelling that token will also flow through and cancel a pending update.
 /// </summary>
 public TaskDelayScheduler(TimeSpan taskDelayTime, IProjectThreadingService threadService, CancellationToken originalSourceToken)
 {
     _taskDelayTime      = taskDelayTime;
     _threadingService   = threadService;
     _cancellationSeries = new CancellationSeries(originalSourceToken);
 }