BeginInvoke方式的返回值及异常

自定义委托调用方法
MethodsHandler handler = new MethodsHandler(method);
handler.BeginInvoke(CallBack,handler);
void CallBack(IAsyncResult ar)
{
    object result = ((MethodsHandler )ar.AsyncDelegate).EndInvoke(ar);
}
注,BeginInvoke的第二个参数object @object对应在回调函数中即为ar.AsyncState。EndInvoke除了获取返回值和异常外,还可以释放资源,因此建议调用EndInvoke以结束委托调用。

通用委托调用方法
根据实际情况可采用无参数或多参数的委托Action,Func。
Func<object> delegateFunction = () =>
{
    return obj;
delegateFunction.BeginInvoke(FinishCall, delegateFunction );
void CallBack(IAsyncResult iar)
    AsyncResult ar = (AsyncResult)iar;
    object result = ((Func<object>)ar.AsyncDelegate).EndInvoke(ar);
}

posted @ 2017-08-25 11:53  sunlyk  阅读(928)  评论(0编辑  收藏  举报