File: MockAsyncResult.cs
Web Access
Project: src\src\System.Private.ServiceModel\tests\Common\Unit\UnitTests.Common.csproj (UnitTests.Common)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using System.Threading;
 
public class MockAsyncResult : IAsyncResult
{
    public MockAsyncResult(TimeSpan timeout, AsyncCallback callback, object state)
    {
        Timeout = timeout;
        Callback = callback;
        AsyncState = state;
        AsyncWaitHandle = new ManualResetEvent(false);
    }
 
    public MockAsyncResult() : this(TimeSpan.FromSeconds(30), null, null)
    {
    }
 
    public TimeSpan Timeout { get; set; }
 
    public AsyncCallback Callback { get; set; }
 
    public object AsyncState { get; set; }
 
    public WaitHandle AsyncWaitHandle { get; set; }
 
    public bool CompletedSynchronously { get; set; }
 
    public bool IsCompleted { get; set; }
 
    public bool IsCompleting { get; set; }
 
    public object Result { get; set; }
 
    public void Complete()
    {
        Complete(null);
    }
 
    public void Complete(object result)
    {
        if (!IsCompleting)
        {
            Result = result;
            IsCompleting = true;
            CompletedSynchronously = true;
            IsCompleted = true;
            ((ManualResetEvent)AsyncWaitHandle).Set();
 
            if (Callback != null)
            {
                Callback(this);
            }
        }
    }
}