关于异步编程WaitHandle的问题,求解

o0o01855 2012-07-28 01:30:12
定义一个委托,调用BeginInvoke方法,等待异步调用完成。
而等待异步调用完成的方式,MSDN给出了4种,其中有一种把我搞迷糊了。

链接地址http://msdn.microsoft.com/zh-cn/library/2e08f6yc(v=vs.110)


MSDN上说“异步调用完成时,WaitHandle 会收到信号,您可以通过调用 WaitOne 方法等待它。”然后还提示说要调用Close方法来显示关闭等待句柄。
其中WaitOne方法的解释是:阻止当前线程,直到当前 WaitHandle 收到信号。

那么用WaitHandle等待异步调用,这种方式跟轮询异步调用完成有什么区别呢?
怎么感觉除了轮询异步调用完成的时候可以执行其他操作外(循环体内),二者相差不大,同样可以起到阻止当前线程,等待委托调用完成的作用呀。

目前我的猜测是如果你在轮询异步调用完成的时候不执行其他操作,就可以用WaitOne替代,因为这个比轮询的效率要高,语义上看来也比较清晰?我是这么理解的。。
...全文
53 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonespace 2012-07-28
  • 打赏
  • 举报
回复
轮询效率肯定比WaitOne低,而且如果你在轮询的时候进行处理,那么你的程序将会变得非常难读,这是编程最忌讳的,宁肯效率低也要代码好理解,

而且轮询效率不高,代码不好理解,大多数情况下是一种一无是处的做法,

但如果你确实有一些可做可不做的长时间处理,放在轮询里做,效率可能会更高,不过这种情况比较少,

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧