解释都在代码里,直接贴代码了:

        private async void btnStartRequestResource_Click(object sender, EventArgs e)
{
ShowAndLog("准备开始异步并行任务,可能耗时较长,请稍后...", false, null);
Stopwatch globalWatch = Stopwatch.StartNew();
var tasks = Enumerable.Range(, ).Select(i =>
{
return Task.Run(async () =>
{
await RequestResourceAsync(i + );
});
});
// 上面的代码只是创建了 Task(任务),可以理解了只是创建了多个线程,并没有启动线程
//真正启动任务是下面的代码 Task.WhenAll,此时 CPU 占用立即达到 100%
Task.WhenAll(tasks).GetAwaiter().GetResult();
globalWatch.Stop();
ShowAndLog(string.Format("运行结束!共耗时 {0} 毫秒。", globalWatch.ElapsedMilliseconds), false, null);
} private async Task RequestResourceAsync(int resId)
{
//假设这里还有几个子资源等待去获取
List<int> childResIdList = new List<int>()
{
resId * + ,
resId * + ,
resId * + ,
resId * + ,
};
foreach (int childResIdItem in childResIdList)
{
//这里假设请求网络资源,或者调用 FFmpeg 转码,或者对磁盘进行 IO 操作等等耗时操作。
await webclient.GetThumbnailAsync(childResIdItem);
}
}

谢谢浏览!

最新文章

  1. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构
  2. [MacOS NSAlert的使用]
  3. uC/OS-II中includes块
  4. Mac截图快捷键
  5. Silverlight控件——如何提升应用程序信任度与问题解决
  6. Dinic算法模板
  7. Ubuntu下配置和使用github
  8. Android开发开始--环境搭建
  9. thrift的简单实现
  10. %{TIMESTAMP_ISO8601} 匹配2016-08-29 17:40:01,191
  11. dp related problems (update continuously)
  12. Java 泛型 泛型代码和虚拟机
  13. 关于firefox启动就崩溃的问题
  14. 实现input输入时智能搜索
  15. Spring Boot 整合JDBCTemplate
  16. C#action和func的使用
  17. C#通过COM组件操作IE浏览器(四):实用代码总结
  18. JavaScript高级程序设计学习(二)之基本概念
  19. 第14月第30天 svn 撤销ignore revert
  20. 【转】Java学习---深入理解线程池

热门文章

  1. CAT 监控搭建
  2. MongoDB for OPS 04:备份恢复
  3. qt 界面去掉系统边框
  4. 什么是POSP?系统逻辑是什么?pos收单必读
  5. RSA 非对称加密算法的Java实现
  6. 一文解读Spring全家桶 (转)
  7. vscode使用formate格式化less遇到的坑
  8. 2.idea安装JavaCC插件.md
  9. C++ 基础语法 快速复习笔记(3)---重载函数,多态,虚函数
  10. 游戏设计模式——C++单例类