///
/// 异步请求对象
///
public class AsyncResult : IAsyncResult
{
static readonly object lockObject = new object();
private ManualResetEvent completeEvent = null;
#region IAsyncResult 成员
///
/// 初始化
///
/// 回调方法
/// 用户状态数据
internal AsyncResult(AsyncCallback cb,object asyncState)
{
this.Callback = cb;
this.AsyncState = asyncState;
this.IsCompleted = false;
this.ParentResult = null;
this.Exception = null;
this.State = null;
}
///
/// 获取用户状态数据
///
public object AsyncState
{
get;
internal set;
}
///
/// 获取或设置自定义状态数据
///
public object State
{
get;
set;
}
///
/// 异步等待句柄
///
public System.Threading.WaitHandle AsyncWaitHandle
{
get
{
lock (lockObject)
{
if (this.completeEvent == null)
this.completeEvent = new ManualResetEvent(false);
return this.completeEvent;
}
}
}
///
/// 完成同上
///
public bool CompletedSynchronously
{
get { return false; }
}
///
/// 是否已完成
///
public bool IsCompleted
{
get;
private set;
}
#endregion
///
/// 父级Result,如果存在
///
public IAsyncResult ParentResult { get; set; }
///
/// 获取异步完成调用
///
public AsyncCallback Callback
{
get;
internal set;
}
///
/// 获取或设置异步过程中产生的异常
///
public Exception Exception { get; set; }
///
/// Completes the request.
///
public void Completed()
{
this.IsCompleted = true;
lock (lockObject)
{
if (this.completeEvent != null)
this.completeEvent.Set();
}
if (this.Callback != null)
this.Callback(this);
}
///
/// Completes the request.
///
public void Completed(Exception ex) {
this.Exception = ex;
this.Completed();
}
}
|