Ejemplo n.º 1
0
        public void TestSetResultAsynchronously_AndAwaitDirectly1()
        {
            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);
                var r = await sut;
                Thread.CurrentThread.ManagedThreadId.Should().Be(threadId);
                return(r);
            }, CancellationToken.None);

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

            task.IsCompleted.Should().BeFalse();
            sut.SetResult("1234");

            scheduler.AdvanceBy(5);

            task.IsCompleted.Should().BeTrue();
            task.Status.Should().Be(TaskStatus.RanToCompletion);
            task.Result.Should().BeEquivalentTo("1234");

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

            Action action = () => sut.SetResult("1234");

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

            sut.SetResult("1234");

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

            task.IsCompleted.Should().BeTrue();
            task.Status.Should().Be(TaskStatus.RanToCompletion);
            task.Result.Should().BeEquivalentTo("1234");
        }