| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace Mono.Nat{    internal class AsyncResult : IAsyncResult    {        private object asyncState;        private AsyncCallback callback;        private bool completedSynchronously;        private bool isCompleted;        private Exception storedException;        private ManualResetEvent waitHandle;        public AsyncResult(AsyncCallback callback, object asyncState)        {            this.callback = callback;            this.asyncState = asyncState;            waitHandle = new ManualResetEvent(false);        }        public object AsyncState        {            get { return asyncState; }        }        public ManualResetEvent AsyncWaitHandle        {            get { return waitHandle; }        }        WaitHandle IAsyncResult.AsyncWaitHandle        {            get { return waitHandle; }        }        public bool CompletedSynchronously        {            get { return completedSynchronously; }            protected internal set { completedSynchronously = value; }        }        public bool IsCompleted        {            get { return isCompleted; }            protected internal set { isCompleted = value; }        }        public Exception StoredException        {            get { return storedException; }        }        public void Complete()        {            Complete(storedException);        }        public void Complete(Exception ex)        {            storedException = ex;            isCompleted = true;            waitHandle.Set();            if (callback != null)                callback(this);        }    }}
 |