异步委托解决了线程池不能返回值的问题,允许双向传递参数,同时可以在调用线程上抛出委托方法中未处理的异常。
实现方式:
- 创建目标方法的委托,通常是Func类泛型委托。
- 调用委托的BeginInvoke,保存一个IAsyncResult类型的返回值,开始异步执行委托方法。
- 调用委托的EndInvoke,传入保存的IAsyncResult类型对象,等待委托方法完成执行,接收返回值,获取委托方法未处理的异常。
static void Main()
{
Func<string, int> method = Work;
IAsyncResult cookie = method.BeginInvoke ("test", null, null);
//
// 这里可以并行执行其它任务
//
int result = method.EndInvoke (cookie);
Console.WriteLine ("String length is: " + result);
}
static int Work (string s) { return s.Length; }
注:EndInvoke是必须的
参考链接: