Пример #1
0
        public async Task Retry_CompletesAfterMaxRetriesExceeded()
        {
            // Arrange
            var counter = 3;
            var e       = new Exception();

            IAsyncOperation OpFactory()
            {
                --counter;
                return(AsyncResult.FromException(e));
            }

            // Act
            var op = AsyncResult.Retry(OpFactory, 1, 1);

            try
            {
                await op;
            }
            catch
            {
            }

            // Assert
            AssertFaulted(op, e);
            Assert.Equal(2, counter);
        }
Пример #2
0
        public async Task ToTask_FailsWhenSourceFails()
        {
            // Arrange
            var op   = AsyncResult.FromException(new Exception());
            var task = op.ToTask();

            // Act/Assert
            await Assert.ThrowsAsync <Exception>(() => task);
        }
Пример #3
0
        public void FromException_ReturnsCanceledOperation()
        {
            // Arrange
            var e = new OperationCanceledException();

            // Act
            var op = AsyncResult.FromException(e);

            // Assert
            AssertCanceled(op, e);
            Assert.True(op.CompletedSynchronously);
        }
Пример #4
0
        public void FromException_ReturnsFailedOperation()
        {
            // Arrange
            var e = new InvalidCastException();

            // Act
            var op = AsyncResult.FromException(e);

            // Assert
            AssertFaulted(op, e);
            Assert.True(op.CompletedSynchronously);
        }
Пример #5
0
        public async Task ContinueWth_ExecutesOnAntecedentFailure(AsyncContinuationOptions options, bool expectedCalled)
        {
            // Arrange
            var op = AsyncResult.FromException(new Exception());
            var continuationCalled   = false;
            var continuationCanceled = false;
            var continuation         = op.ContinueWith(o => continuationCalled = true, options);

            // Act
            try
            {
                await continuation;
            }
            catch (OperationCanceledException)
            {
                continuationCanceled = true;
            }

            // Assert
            Assert.Equal(expectedCalled, continuationCalled);
            Assert.Equal(!expectedCalled, continuationCanceled);
        }
Пример #6
0
        public async Task Unwrap_FailsIfInnerOperationFails()
        {
            // Arrange
            var expectedException = new Exception();
            var actualException   = default(Exception);
            var op1 = AsyncResult.FromException(expectedException);
            var op2 = AsyncResult.FromResult(op1);
            var op  = op2.Unwrap();

            // Act
            try
            {
                await op;
            }
            catch (Exception e)
            {
                actualException = e;
            }

            // Assert
            Assert.True(op.IsFaulted);
            Assert.Equal(expectedException, actualException);
        }
Пример #7
0
        public async Task Retry_CompletesWhenSourceCompletes()
        {
            // Arrange
            var counter = 3;

            IAsyncOperation OpFactory()
            {
                if (--counter > 0)
                {
                    return(AsyncResult.FromException(new Exception()));
                }
                else
                {
                    return(AsyncResult.Delay(1));
                }
            }

            // Act
            var   op = AsyncResult.Retry(OpFactory, 1);
            await op;

            // Assert
            AssertCompleted(op);
        }