C#5.0异步

Posted jingjingweixiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#5.0异步相关的知识,希望对你有一定的参考价值。

异步编程

忘掉那些繁琐的异步编程模型吧!领略下C#5.0带来的便捷性

应用场景

当需要I/O绑定(例如从网络请求数据或访问数据库)

当使用CPU绑定代码(例如执行成本高昂的计算)

异步模型的概述

对于I/O绑定的代码,当你await一个操作,它将返回async方法中的一个Task或Task<T>

对于CPU绑定代码,当你await一个操作,它将在后台线程通过Task.Run方法启动

await关键字有这奇妙的作用,当你await一个操作,它控制执行await的方法的调用方,且最终允许UI具有响应性或服务具有灵活。

示例

I/O绑定情景下:

        private readonly HttpClient _httpClient = new HttpClient();

        downloadButton.Clicked+=async(o, e) =>
        
          var stringData = await _httpClient.GetStringAsync(URL);
        DoSomethingWithData(stringData);

消耗CPU大量计算下:

        private DamagResult CalculateDamageDone()
        
            //do lots of Calcute
        

        button.Click+= async(o, e) =>
        
          var result = await Task.Run(() => CalculateDamageDone());
        DisplayDamage(result);
         

备注:

async方法需在其主体中具有awat关键字,否则它们将永不暂停

async void 应仅用于事件处理程序

 

以上是关于C#5.0异步的主要内容,如果未能解决你的问题,请参考以下文章

C#C# 5.0 新特性——Async和Await使异步编程更简单

C# 5.0 特性之异步方法(AM)

如何正确理解.NET 4.5和C#5.0中的async/await异步编程模式

[译] C# 5.0 中的 Async 和 Await (整理中...)

Async异步编程简介

Android 实用代码片段