博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.NET中的异步调用

Posted on 2006-09-26 15:39  无言  阅读(219)  评论(0编辑  收藏  举报

异步调用在,NET编程中经常出现,比较自己去写线程,用异步调用无疑提高了开发效率,而且在稳定性上也有保证,常用的异步调用步骤如下:
首先是申明代理,public delegate string TestInvoke();    //声明一个代理,符合该签名的方法必须返回一个字符串
然后写个简单的类来验证异步调用的结果
 public class Test
 {
        
public string testInvoke() 
      {
        Console.WriteLine("异步调用开始");
           return "异步调用结束";
      }
  public void testcallback(IAsyncResult back)
  {Console.WriteLine(back.AsyncState);}
 }

delegate的BeginInvoke方法用于开始异步调用,该方法有两个参数,第一个参数是该异步调用的回调方法,所谓回调方法,就是说当后台异步调用完成后,后台自动去执行的函数,上类中的testcallback方法就是个回调方法,该方法必须接受一个IAsyncResult 参数
   第二个参数是个对象。这个对象将会存放在BeginInvoke返回的IASyncResult对象的AsyncState实体里面,IASyncResult可以把他当做一个通知单,该通知单的返回就表示异步调用已经开始,同时,通过查询IASyncResult里面的IsCompleted属性可以得知调用是否完成
下面实际操作一番
   Test tclass=new Test();
   TestInvoke _testinvoke=new TestInvoke(tclass.run);
   IAsyncResult te=_testinvoke.BeginInvoke(new AsyncCallback(“这是回调“),"test");
   string endreturn=_testinvoke.EndInvoke(te);
   Console.WriteLine(endreturn);
然后看看屏幕打印的结果,一切就明白了
你也可以将testInvoke方法改成一个循环,再看看结果,印象会更深刻
同时,在实际使用过程中,推荐自己写类继承IAsyncResult ,这样哟功能起来会更方便
EndInvoke还可以检测到BeginInvoke在执行过程中出现的异常,所以在BeginInvoke的同时最好是把EndInvoke也用上