[.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程
2016-11-22 07:49
633 查看
怎样使用 async & await 一步步将同步代码转换为异步编程
【博主】反骨仔 【出处】http://www.cnblogs.com/liqingwen/p/6079707.html序
上次,博主通过《利用 async & await 的异步编程》该篇点睛之作介绍了 async & await 的基本用法及异步的控制流和一些其它的东西。今天,博主打算从创建一个普通的 WPF 应用程序开始,看看如何将它逐步转换成一个异步的解决方案。
目录
介绍添加引用
先创建一个同步的 WPF
将上面的 demo 逐步转换为异步方法
介绍
这里通过一个普通的 WPF 程序进行讲解:/// <summary> /// 异步统计总数 /// </summary> private async Task SumSizesAsync() { var hc = new HttpClient() { MaxResponseContentBufferSize = 102400 }; //加载网址 var urls = InitUrlInfoes(); //字节总数 var totalCount = 0; foreach (var url in urls) { //返回一个 url 内容的字节数组 //var contents = await GetUrlContentsAsync(url); var contents = await hc.GetByteArrayAsync(url); //显示结果 DisplayResults(url, contents); //更新总数 totalCount += contents.Length; } tbResult.Text += $"\r\n Total: {totalCount}, OK!"; }
修改后的:SumSizesAsync 方法
这时,项目的变换从同步到异步操作已经完成。
修改后的效果差异:最重要的是,UI 线程不会阻塞下载过程。当 web 资源(或其他资源)下载、统计并显示时,可以移动或调整窗口的大小。如果其中一个网站速度或不响应,你可以直接点击关闭 (右上角的 X),再也不需要打开任务管理器进行关闭该进程了。
Demo 下载
同系列的随笔
利用 async & await 的异步编程走进异步编程的世界 - 开始接触 async/await
走进异步编程的世界 - 剖析异步方法(上)
走进异步编程的世界 - 剖析异步方法(下)
走进异步编程的世界 - 在 GUI 中执行异步操作
【参考】https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/concepts/async/walkthrough-accessing-the-web-by-using-async-and-await
【参考引用】微软官方文档
相关文章推荐
- [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程
- .net 4.5如何使用Async和Await进行异步编程
- [.NET] 利用 async & await 的异步编程
- 介绍.net 4.5 异步编程核心内容,如何使用Async和Await进行异步编程
- .Net异步编程之Async与Await的使用
- .NET 4.5 使用async和await关键字调用异步方法
- 使用Async和Await进行异步编程(C#版 适用于VS2015)
- C#~异步编程续~.net4.5主推的await&async应用(转)
- silverlight学习之路(2)异步编程趋于同步 利用async和await调用wcf服务
- [.NET 4.5] ADO.NET / ASP.NET 使用 Async 和 Await 异步 存取数据库
- 使用天气预报api(中国天气网)获取城市天气(1)---async/await 异步编程
- 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
- async & await 异步编程小示例,一看就懂
- .Net 4.5 异步编程初试(async和await)
- .Net 4.5 的async 和await 的简单理解使用
- C#的多线程——使用async和await来完成异步编程(Asynchronous Programming with async and await)
- 使用Async和Await进行异步编程(C#版 适用于VS2015) z
- 使用 Async 和 Await 的异步编程
- .NET 中的 async/await 异步编程
- .NET 中的 async/await 异步编程