Ejemplo n.º 1
0
        public void TestSetCanceledAsynchronously()
        {
            var scheduler = new TestScheduler();
            var sut       = new FastTaskCompletionSource <string>();

            var threadId = Thread.CurrentThread.ManagedThreadId;

            var task = scheduler
                       .Run(async ct =>
            {
                Thread.CurrentThread.ManagedThreadId.Should().Be(threadId);
                await sut.Task;
                throw new Exception("should not reach here");
            }, CancellationToken.None);

            task.IsCompleted.Should().BeFalse();
            scheduler.AdvanceBy(5);

            task.IsCompleted.Should().BeFalse();

            sut.SetCanceled();

            scheduler.AdvanceBy(5);

            task.IsCompleted.Should().BeTrue();
            task.Status.Should().Be(TaskStatus.Canceled);

            scheduler.Stop();
        }
Ejemplo n.º 2
0
        public void TestSetCanceledTwice_ThrowException()
        {
            var sut = new FastTaskCompletionSource <string>();

            Action action = () => sut.SetCanceled();

            action.Should().NotThrow();
            action.Should().Throw <InvalidOperationException>();
        }
Ejemplo n.º 3
0
        public void TestSetCanceledSynchronously1()
        {
            var sut = new FastTaskCompletionSource <string>();

            sut.SetCanceled();

            // The task is created AFTER the task being canceled
            var task = sut.Task;

            task.IsCompleted.Should().BeTrue();
            task.Status.Should().Be(TaskStatus.Canceled);
        }