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/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。