您的位置:首页 > 编程语言

[.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

【参考引用】微软官方文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: