C# 中如何创建异步平行任务?
2019-03-29 11:05 音乐让我说 阅读(404) 评论(0) 编辑 收藏 举报解释都在代码里,直接贴代码了:
private async void btnStartRequestResource_Click(object sender, EventArgs e) { ShowAndLog("准备开始异步并行任务,可能耗时较长,请稍后...", false, null); Stopwatch globalWatch = Stopwatch.StartNew(); var tasks = Enumerable.Range(0, 3).Select(i => { return Task.Run(async () => { await RequestResourceAsync(i + 1); }); }); // 上面的代码只是创建了 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 * 10 + 1, resId * 10 + 2, resId * 10 + 3, resId * 10 + 4, }; foreach (int childResIdItem in childResIdList) { //这里假设请求网络资源,或者调用 FFmpeg 转码,或者对磁盘进行 IO 操作等等耗时操作。 await webclient.GetThumbnailAsync(childResIdItem); } }
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2012-03-29 一个枚举(Enum)的位操作的例子
2012-03-29 ASP.NET MVC 3 中 RemoteAttribute 的使用 Demo
2012-03-29 Html 在线编辑器 KindEditor 的使用例子