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); }
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); }
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); }