Exemple #1
0
        public void Begin_WithCallbackSyncContext_ThrowsAsyncEvenIfSendContextCaptures()
        {
            // Arrange
            InvalidOperationException exception = new InvalidOperationException(
                "Some exception text."
                );
            CapturingSynchronizationContext capturingSyncContext =
                new CapturingSynchronizationContext();
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = false,
                IsCompleted            = true
            };

            using (asyncResult)
            {
                bool          originalCallbackCalled = false;
                IAsyncResult  passedAsyncResult      = null;
                AsyncCallback passedCallback         = null;
                AsyncCallback originalCallback       = ar =>
                {
                    passedAsyncResult      = ar;
                    originalCallbackCalled = true;
                    throw exception;
                };

                // Act & Assert
                IAsyncResult outerResult = AsyncResultWrapper.Begin <object>(
                    originalCallback,
                    null,
                    (callback, callbackState, state) =>
                {
                    passedCallback         = callback;
                    asyncResult.AsyncState = callbackState;
                    return(asyncResult);
                },
                    (ar, state) =>
                {
                    asyncResult.IsCompleted = true;
                    passedCallback(ar);
                },
                    null,
                    callbackSyncContext: capturingSyncContext
                    );
                SynchronousOperationException thrownException =
                    Assert.Throws <SynchronousOperationException>(
                        delegate
                {
                    AsyncResultWrapper.End(outerResult);
                },
                        @"An operation that crossed a synchronization context failed. See the inner exception for more information."
                        );

                // Assert
                Assert.Equal(exception, thrownException.InnerException);
                Assert.True(originalCallbackCalled);
                Assert.False(passedAsyncResult.CompletedSynchronously);
                Assert.True(capturingSyncContext.SendCalled);
            }
        }
Exemple #2
0
        public void Begin_WithCallbackSyncContext_ThrowsSynchronous()
        {
            // Arrange
            InvalidOperationException exception = new InvalidOperationException(
                "Some exception text."
                );
            CapturingSynchronizationContext capturingSyncContext =
                new CapturingSynchronizationContext();
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = true,
                IsCompleted            = true
            };

            using (asyncResult)
            {
                bool          originalCallbackCalled = false;
                IAsyncResult  passedAsyncResult      = null;
                AsyncCallback originalCallback       = ar =>
                {
                    passedAsyncResult      = ar;
                    originalCallbackCalled = true;
                    throw exception;
                };

                // Act & Assert
                InvalidOperationException thrownException =
                    Assert.Throws <InvalidOperationException>(
                        delegate
                {
                    AsyncResultWrapper.Begin <object>(
                        originalCallback,
                        null,
                        (callback, callbackState, state) =>
                    {
                        asyncResult.AsyncState = callbackState;
                        return(asyncResult);
                    },
                        (ar, state) => { },
                        null,
                        callbackSyncContext: capturingSyncContext
                        );
                },
                        exception.Message
                        );

                // Assert
                Assert.Equal(exception, thrownException);
                Assert.True(originalCallbackCalled);
                Assert.True(passedAsyncResult.CompletedSynchronously);
                Assert.False(capturingSyncContext.SendCalled);
            }
        }
        public void Begin_WithCallbackSyncContext_ThrowsSynchronous()
        {
            // Arrange
            InvalidOperationException exception = new InvalidOperationException("Some exception text.");
            CapturingSynchronizationContext capturingSyncContext = new CapturingSynchronizationContext();
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = true,
                IsCompleted = true
            };

            bool originalCallbackCalled = false;
            IAsyncResult passedAsyncResult = null;
            AsyncCallback originalCallback = ar =>
            {
                passedAsyncResult = ar;
                originalCallbackCalled = true;
                throw exception;
            };

            // Act & Assert
            InvalidOperationException thrownException = Assert.Throws<InvalidOperationException>(
                delegate 
                {
                    AsyncResultWrapper.Begin<object>(
                        originalCallback,
                        null,
                        (callback, callbackState, state) =>
                        {
                            asyncResult.AsyncState = callbackState;
                            return asyncResult;
                        },
                        (ar, state) => { },
                        null,
                        callbackSyncContext: capturingSyncContext);
                },
                exception.Message);

            // Assert
            Assert.Equal(exception, thrownException);
            Assert.True(originalCallbackCalled);
            Assert.True(passedAsyncResult.CompletedSynchronously);
            Assert.False(capturingSyncContext.SendCalled);
        }
        public void Begin_WithCallbackSyncContext_ThrowsAsyncEvenIfSendContextCaptures()
        {
            // Arrange
            InvalidOperationException exception = new InvalidOperationException("Some exception text.");
            CapturingSynchronizationContext capturingSyncContext = new CapturingSynchronizationContext();
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = false,
                IsCompleted = true
            };

            bool originalCallbackCalled = false;
            IAsyncResult passedAsyncResult = null;
            AsyncCallback passedCallback = null;
            AsyncCallback originalCallback = ar =>
            {
                passedAsyncResult = ar;
                originalCallbackCalled = true;
                throw exception;
            };

            // Act & Assert
            IAsyncResult outerResult = AsyncResultWrapper.Begin<object>(
                 originalCallback,
                 null,
                 (callback, callbackState, state) =>
                 {
                     passedCallback = callback;
                     asyncResult.AsyncState = callbackState;
                     return asyncResult;
                 },
                 (ar, state) =>
                 {
                     asyncResult.IsCompleted = true;
                     passedCallback(ar);
                 },
                 null,
                 callbackSyncContext: capturingSyncContext);
            SynchronousOperationException thrownException = Assert.Throws<SynchronousOperationException>(
                delegate
                {
                    AsyncResultWrapper.End(outerResult);
                },
                @"An operation that crossed a synchronization context failed. See the inner exception for more information.");

            // Assert
            Assert.Equal(exception, thrownException.InnerException);
            Assert.True(originalCallbackCalled);
            Assert.False(passedAsyncResult.CompletedSynchronously);
            Assert.True(capturingSyncContext.SendCalled);
        }