创建一个委托,并异步调用它,实际上是启动一个线程并在该线程中执行委托方法。*委托使用线程池来完成异步操作。
委托类Delegate 使用BeginInvoke()方法启动异步调用,并且返回一个IAsyncResult 对象。在启动线程中有以下三种方法等待
调用结束:
1. 检查IAsyncResult的IsCompleted属性,当调用没有完成时IsCompleted为false,否则为true。
2. 使用IAsyncResult的AsyncWaitHandle属性可以返回一个WaitHandle对象,WaitHandle的WaitOne方法可以设置一个
等待超时时间。
3.我们可以在异步调用的时候将一个异步回调委托传递给他,当委托的异步调用结束时会自动调用这个异步回调委托的方法。
AsyncCallback 委托定义了异步调用结束时掉用到方法。例如:
1 public static Action<String> de; 2 public static void RunSnippet() 3 { 4 de = new Action<String>(MyClass.funcation); 5 de.BeginInvoke("异步调用启动",new AsyncCallback(Callback),"异步调用完成"); 6 Console.WriteLine("启动线程"); 7 } 8 9 public static void funcation(String msg) 10 { 11 Console.WriteLine(msg); 12 Thread.Sleep(2000); 13 } 14 15 public static void Callback(IAsyncResult ar) 16 { 17 Console.WriteLine(ar.AsyncState); 18 de.EndInvoke(ar); 19 }
输出结果为
启动线程
异步调用启动
异步调用完成