wait 阻塞的 when是异步的非阻塞的。

            Task[] tlist = new Task[] { Task.Run(() => { Thread.Sleep(3000); }), Task.Factory.StartNew(() => { Thread.Sleep(90000); }) };

          //Task.WaitAll(tlist);
// MessageBox.Show("ok ");
Task.WhenAny(tlist).ContinueWith((s)=>{ MessageBox.Show("ok");
return s;
});

  上面是例子WhenAny 是任何一个任务完成就会执行 MessageBox.Show("ok"); 测试上面的例子等待3秒回OK。

如果换成WhenAll那你会等待90秒才会看到 MessageBox.Show("ok");      ContinueWith 就是任务完成后执行的方法体,

就是个Task. Task.WaitAll(tlist);意思是一样但是,线程会阻塞。因为 Task.WaitAll 不是一个异步或Task类型,而是一个常规方法体。

有了.Netframwork4.5的Task感觉比以前多线程简化很多也方便很多。基本可以抛弃 new Thread... 和BackgroundWorker了。

.Netframwork4.5里的Task.Run等效于 Task.Factory.StartNew 。Task.Factory.StartNew 在4.0里就有。

最新文章

  1. 理解浮动和position定位
  2. java线程池ThreadPoolExecutor使用简介
  3. windows获取硬盘使用率等信息
  4. 【URAL 1297】Palindrome 最长回文子串
  5. dhcp原理、安装、相关命令、疑惑
  6. Nginx+tomcat 做负载均衡
  7. OpenXml操作Word的一些操作总结. - 天天不在
  8. QTP下载链接
  9. .NET中的程序集(Assembly)
  10. C# 对类中的保护成员进行写操作(邀请大家拍砖)
  11. IOS版新闻客户端应用源码项目
  12. Android开发10.3:UI组件GridView网格视图
  13. Android之Http通信——3.Android HTTP请求方式:HttpURLConnection
  14. Mongodb基础用法及查询操作[转载]
  15. php操作mongodb的常用函数
  16. Python学习笔记-Django连接SQLSERVER
  17. notes for lxf(三)
  18. Android内嵌VLC实现播放网络视频,网络音频
  19. INSERT 中ON DUPLICATE KEY UPDATE的使用
  20. JavaScript 取对象的值时用点和中括号的区别

热门文章

  1. activemq高可用
  2. Qt读写Json
  3. sass和less的对比
  4. DRF框架 之基础配置
  5. 为什么你不看好家教O2O
  6. .net Core——SqlSugar使用
  7. pandas的settingwithWaring报警
  8. React 应用设计之道 - curry 化妙用
  9. luogu 3488 [POI2009]LYZ-Ice Skates 线段树 + 思维
  10. [luogu]P2680 运输计划[二分答案][树上差分]