예제 #1
0
        public void FaultedWriteFailsPendingTasks()
        {
            var fake           = new FakeWriter();
            var writer         = new BufferedClientStreamWriter <string>(fake, 5);
            var task1          = writer.WriteAsync("1");
            var task2          = writer.WriteAsync("2");
            var task3          = writer.WriteAsync("3");
            var completionTask = writer.WriteCompleteAsync();

            AssertNotCompleted(task1, task2, task3, completionTask);

            // Server handles first message successfully
            fake.CompleteCurrentTask();
            AssertCompletedWithStatus(task1, TaskStatus.RanToCompletion);
            AssertNotCompleted(task2, task3, completionTask);

            // Server fails second message. All pending tasks become faulted with the same exception.
            var exception = new Exception("Bang");

            fake.FailCurrentTask(exception);
            foreach (var task in new[] { task2, task3, completionTask })
            {
                AssertCompletedWithStatus(task, TaskStatus.Faulted);
                Assert.Same(exception, task.Exception.InnerExceptions[0]);
            }
        }
예제 #2
0
        public void FaultedWriteFailsFutureTasks()
        {
            var fake   = new FakeWriter();
            var writer = new BufferedClientStreamWriter <string>(fake, 5);
            var task1  = writer.WriteAsync("1");

            // Server fails first message
            var exception = new Exception("Bang");

            fake.FailCurrentTask(exception);

            // Subsequent calls to Write and Complete fail
            var task2          = writer.WriteAsync("2");
            var task3          = writer.WriteAsync("3");
            var completionTask = writer.WriteCompleteAsync();

            foreach (var task in new[] { task1, task2, task3, completionTask })
            {
                AssertCompletedWithStatus(task, TaskStatus.Faulted);
                Assert.Same(exception, task.Exception.InnerExceptions[0]);
            }
        }