定义一个委托,调用BeginInvoke方法,等待异步调用完成。
而等待异步调用完成的方式,MSDN给出了4种,其中有一种把我搞迷糊了。链接地址http://msdn.microsoft.com/zh-cn/library/2e08f6yc(v=vs.110)
MSDN上说“异步调用完成时,WaitHandle 会收到信号,您可以通过调用 WaitOne 方法等待它。”然后还提示说要调用Close方法来显示关闭等待句柄。
其中WaitOne方法的解释是:阻止当前线程,直到当前 WaitHandle 收到信号。那么用WaitHandle等待异步调用,这种方式跟轮询异步调用完成有什么区别呢?
怎么感觉除了轮询异步调用完成的时候可以执行其他操作外(循环体内),二者相差不大,同样可以起到阻止当前线程,等待委托调用完成的作用呀。目前我的猜测是如果你在轮询异步调用完成的时候不执行其他操作,就可以用WaitOne替代,因为这个比轮询的效率要高,语义上看来也比较清晰?我是这么理解的。。

解决方案 »

  1.   

    轮询效率肯定比WaitOne低,而且如果你在轮询的时候进行处理,那么你的程序将会变得非常难读,这是编程最忌讳的,宁肯效率低也要代码好理解,而且轮询效率不高,代码不好理解,大多数情况下是一种一无是处的做法,但如果你确实有一些可做可不做的长时间处理,放在轮询里做,效率可能会更高,不过这种情况比较少,