public void WrapCallbackForSynchronizedExecution_DoesNotCallSyncIfOperationCompletedSynchronously()
        {
            // Arrange
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = true,
                IsCompleted = true
            };

            bool originalCallbackCalled = false;
            AsyncCallback originalCallback = ar =>
            {
                Assert.Equal(asyncResult, ar);
                originalCallbackCalled = true;
            };

            DummySynchronizationContext syncContext = new DummySynchronizationContext();

            // Act
            AsyncCallback retVal = AsyncUtil.WrapCallbackForSynchronizedExecution(originalCallback, syncContext);
            retVal(asyncResult);

            // Assert
            Assert.True(originalCallbackCalled);
            Assert.False(syncContext.SendCalled);
        }
Exemplo n.º 2
0
        public void WrapCallbackForSynchronizedExecution_DoesNotCallSyncIfOperationCompletedSynchronously()
        {
            // Arrange
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = true,
                IsCompleted            = true
            };

            bool          originalCallbackCalled = false;
            AsyncCallback originalCallback       = ar =>
            {
                Assert.Equal(asyncResult, ar);
                originalCallbackCalled = true;
            };

            DummySynchronizationContext syncContext = new DummySynchronizationContext();

            // Act
            AsyncCallback retVal = AsyncUtil.WrapCallbackForSynchronizedExecution(originalCallback, syncContext);

            retVal(asyncResult);

            // Assert
            Assert.True(originalCallbackCalled);
            Assert.False(syncContext.SendCalled);
        }
Exemplo n.º 3
0
        public void Begin_WithCallbackSyncContext_CallsSendIfOperationCompletedAsynchronously()
        {
            // Arrange
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = false,
                IsCompleted            = false
            };

            using (asyncResult)
            {
                bool          originalCallbackCalled = false;
                IAsyncResult  passedAsyncResult      = null;
                AsyncCallback passedCallback         = null;
                AsyncCallback originalCallback       = ar =>
                {
                    originalCallbackCalled = true;
                    passedAsyncResult      = ar;
                };
                object originalState = new object();
                DummySynchronizationContext syncContext = new DummySynchronizationContext();

                // Act
                IAsyncResult outerResult = AsyncResultWrapper.Begin <object>(
                    originalCallback,
                    originalState,
                    (callback, callbackState, state) =>
                {
                    passedCallback         = callback;
                    asyncResult.AsyncState = callbackState;
                    return(asyncResult);
                },
                    (ar, state) =>
                {
                    asyncResult.IsCompleted = true;
                    passedCallback(ar);
                },
                    null,
                    callbackSyncContext: syncContext
                    );
                AsyncResultWrapper.End(outerResult);

                // Assert
                Assert.True(originalCallbackCalled);
                Assert.False(passedAsyncResult.CompletedSynchronously);
                Assert.True(passedAsyncResult.IsCompleted);
                Assert.Same(originalState, passedAsyncResult.AsyncState);
                Assert.True(syncContext.SendCalled);
            }
        }
        public void Begin_WithCallbackSyncContext_DoesNotCallSendIfOperationCompletedSynchronously()
        {
            // Arrange
            MockAsyncResult asyncResult = new MockAsyncResult()
            {
                CompletedSynchronously = true,
                IsCompleted = true
            };
            bool originalCallbackCalled = false;
            IAsyncResult passedAsyncResult = null;
            AsyncCallback originalCallback = ar =>
            {
                passedAsyncResult = ar;
                originalCallbackCalled = true;
            };
            object originalState = new object();

            DummySynchronizationContext syncContext = new DummySynchronizationContext();

            // Act
            IAsyncResult outerResult = AsyncResultWrapper.Begin<object>(
                originalCallback,
                originalState,
                (callback, callbackState, state) =>
                {
                    asyncResult.AsyncState = callbackState;
                    return asyncResult;
                },
                (ar, state) => { },
                null,
                callbackSyncContext: syncContext);

            // Assert
            Assert.True(originalCallbackCalled);
            Assert.True(passedAsyncResult.CompletedSynchronously);
            Assert.True(passedAsyncResult.IsCompleted);
            Assert.Same(originalState, passedAsyncResult.AsyncState);
            Assert.False(syncContext.SendCalled);
        }