//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime { using System; using System.Threading; //An AsyncResult that completes as soon as it is instantiated. class CompletedAsyncResult : AsyncResult { public CompletedAsyncResult(AsyncCallback callback, object state) : base(callback, state) { Complete(true); } [Fx.Tag.GuaranteeNonBlocking] public static void End(IAsyncResult result) { Fx.AssertAndThrowFatal(result.IsCompleted, "CompletedAsyncResult was not completed!"); AsyncResult.End(result); } } class CompletedAsyncResult : AsyncResult { T data; public CompletedAsyncResult(T data, AsyncCallback callback, object state) : base(callback, state) { this.data = data; Complete(true); } [Fx.Tag.GuaranteeNonBlocking] public static T End(IAsyncResult result) { Fx.AssertAndThrowFatal(result.IsCompleted, "CompletedAsyncResult was not completed!"); CompletedAsyncResult completedResult = AsyncResult.End>(result); return completedResult.data; } } class CompletedAsyncResult : AsyncResult { TResult resultData; TParameter parameter; public CompletedAsyncResult(TResult resultData, TParameter parameter, AsyncCallback callback, object state) : base(callback, state) { this.resultData = resultData; this.parameter = parameter; Complete(true); } [Fx.Tag.GuaranteeNonBlocking] public static TResult End(IAsyncResult result, out TParameter parameter) { Fx.AssertAndThrowFatal(result.IsCompleted, "CompletedAsyncResult was not completed!"); CompletedAsyncResult completedResult = AsyncResult.End>(result); parameter = completedResult.parameter; return completedResult.resultData; } } }