C# 伍.0 异步编制程序,

调用者不能等待任何返回结果,1、Async方法有三种返回类型,调用者不能等待任何返回结果,1、Async方法有三种返回类型,  如果你觉得这件事儿没意义翻译的又差,愿爱技术的园友们在今后每一次应该猛烈突破的时候

在C#5.0中,扩大了多个庞大的新效用–异步编制程序。( .NET FrameWork四.5 
版本)

C# 5.0 异步编制程序,

在C#伍.0中,增添了3个庞大的新职能–异步编程。( .NET FrameWork4.五 
版本)

金沙澳门官网7817网址,它以多个新型关键字出现:

  • ·async
  • ·await

一、Async方法有三种回到类型:

  • async void
    :是1个“触发并忘记”的异步操作,最广大的应用场景是在async代码和其余代码的境界意况,比方UI事件管理必须回到void。

调用者无法等待其余重临结果,并且不可能清楚操作哪一天结束也许是还是不是成功。

当你规定你无需精通操作曾几何时结束或然是否成功时,你应该使用void。

return statement只须求return;,并且是可挑选。(不写也行)

  • async
    Task:允许调用者等待操作甘休的结果,并且传递在异步代码试行时期的老大。

当我们没有须求别的重回类值时,二个async Task方法比async
void方法越来越好,因为他同意调用者使用await去等待,并且管理非凡更易于。

return statement只需求return;,并且是可选择的。(不写也行)

  • async
    Task<T>:举例Task<string>,平常用于异步操作要求再次来到值的时候。

return必须有3个T类型的表明式,比方伍+x,并且必须出现在章程全部路子的终极。

贰、await
try中得以应用,但不可能在catch和finally中利用,我们能够透过以下情势化解

  bool failed = false;

try
{
   page = await webClient.DownloadStringTaskAsync("http://oreilly.com");
}
catch (WebException)
{
   failed = true;
}
if (failed)
{
   page = await webClient.DownloadStringTaskAsync("http://oreillymirror.com");
}

3、Async lambda表达式

C#是在大诸多岗位是不一致意在Query表明式中采用await关键字的。是因为这么些地点会被编写翻译成lambda表达式,正因为这么,该lambda表明式必要标识为async关键字。

大家能够将他们更换,如下

IEnumerable<int> transformed = from x in alexsInts
where x != 9
select x + 2;

由此选拔Linq内部带的拓展方法。然后lambda表明式变得明了可读,继而你也就足以标识他们为async,从而选用await了。

IEnumerable<Task<int>> tasks = alexsInts
.Where(x => x != 9)
.Select(async x => await DoSomthingAsync(x) + await DoSomthingElseAsync(x));
IEnumerable<int> transformed = await Task.WhenAll(tasks);

 参考:中文转发

5.0 异步编制程序, 在C#五.0
中,增添了二个无敌的新效用–异步编制程序。( .NET FrameWork四.5 版本 )
它以五个流行关键字出现: ·async ·await 1、Async方…

写在前面

它以多个流行关键字出现:

  在学异步,有位园友推荐了《async in
C#5.0》,没找到粤语版,恰巧也想巩固下英文,用自个儿愚笨的英文翻译一些珍视的一些,纯属娱乐,轻易分享,保持学习,谨记谦虚。

  • ·async
  • ·await

  假让你感觉那件事情没意义翻译的又差,尽情的踩吧。借使您以为值得鼓励,多谢留下你的赞,愿爱才能的园友们在以往每三回应该能够突破的时候,不采纳知难而退。在每2遍应该单独理念的时候,不选拔与世浮沉,应该尽力的时候,不选取尽量,不辜负每一秒存在的意义。

一、Async方法有两种回到类型:

  
转载和爬虫请注明原著链接,博客园
蜗牛 2016年6月27日。

  • async void
    :是四个“触发并忘记”的异步操作,最常见的使用场景是在async代码和其他代码的分界景况,比方UI事件管理必须回到void。

目录

调用者不可能等待其余重临结果,并且不可能精通操作何时结束或然是或不是成功。

第0一章 异步编制程序介绍

当你显著你无需掌握操作何时甘休或然是否成功时,你应有利用void。

第0贰章 为啥采纳异步编制程序

return statement只必要return;,并且是可挑选。(不写也行)

第0三章 手动编写异步代码

  • async
    Task:允许调用者等待操作甘休的结果,并且传递在异步代码施行时期的万分。

第04章 编写Async方法

当大家不必要别的重回类值时,贰个async Task方法比async
void方法更加好,因为他同意调用者使用await去等待,并且管理非凡更便于。

第0五章 Await究竟做了什么样

return statement只需求return;,并且是可挑选的。(不写也行)

第0陆章
以Task为底蕴的异步格局

  • async
    Task<T>:举例Task<string>,平常用于异步操作要求重返值的时候。

第0柒章 异步代码的一部分工具

return必须有二个T类型的表明式,比方五+x,并且必须出现在章程全部路径的结尾。

第0八章 哪个线程在运维你的代码

2、await
try中得以选用,但无法在catch和finally中使用,大家能够通过以下办法缓和

第0玖章 异步编制程序中的十分

  bool
failed = false;

第七章 并行使用异步编制程序

try
{
   page = await webClient.DownloadStringTaskAsync("http://oreilly.com");
}
catch (WebException)
{
   failed = true;
}
if (failed)
{
   page = await webClient.DownloadStringTaskAsync("http://oreillymirror.com");
}

第3一章 单元测试你的异步代码

3、Async lambda表达式

第三2章 ASP.NET应用中的异步编制程序

C#是在大多数地点是不相同意在Query表明式中央银行使await关键字的。是因为这么些地点会被编写翻译成lambda表达式,正因为这么,该lambda表明式须求标识为async关键字。

第三三章 WinRT应用中的异步编制程序

我们能够将她们转移,如下

第3四章 编写翻译器在底层为您的异步做了怎样

IEnumerable<int> transformed = from x in alexsInts
where x != 9
select x + 2;

第15章 异步代码的质量

经过行使Linq内部带的开展方法。然后lambda表达式变得明了可读,继而你也就足以标志他们为async,从而接纳await了。

编写Async方法

IEnumerable<Task<int>> tasks = alexsInts
.Where(x => x != 9)
.Select(async x => await DoSomthingAsync(x) + await DoSomthingElseAsync(x));
IEnumerable<int> transformed = await Task.WhenAll(tasks);

  未来大家早已清楚异步代码有多棒了,可是它到底难写吧?是时候来看1看C#五.0的Async作用了。正如笔者辈前边在第三章所观看的,叁个async方法允许包罗await关键字。

 参考:粤语转发

private asyncvoid DumpWebPageAsync(string uri)
{
WebClient webClient = new WebClient();
string page = awaitwebClient.DownloadStringTaskAsync(uri);
Console.WriteLine(page);
}

  由于await关键字在此格局中,到await这里就不再继续向下实践,直到下载甘休恢复生机处理。这种处理使此措施异步,在本章,大家将会追究这样的异步方法。

 

将示例代码调换为Async的(第二章末尾七个演示)

  大家今后将事先尤其示例调换到Async的。假若得以,打开原版的代码,在你向下阅读前,尝试将它调换来async和await的方式。

  最要害的主意是AddFavicon,即,将下载后的icons加多到UI分界面上的秘籍。咱们想把它编制程序异步的,那样UI线程在下载时期就有空闲去相应用户的操作。第三步要做的正是加多async关键字到艺术上。它和static关键字在同1的签订契约地方。

  然后我们须求使用await等待下载。await在C#语法中歌星医院运算符的剧中人物,就像是‘!’或然‘(type)转变操作符’。他被放置在1个表明式的左侧,意于异步的等候表达式。

  最终,调用DownloadData方法必须替换到调用异步版本DownloadDataAsync。

        
Async方法不是机动完毕异步的。Async方法唯有是将调用(消耗consume)此外异步方法特别轻易。他们一齐地运作着,一向到调用异步方法和await它。当他们做那样的业务时,必须使本人变得异步。有时,三个async方法不await任何事情。

private asyncvoid AddAFavicon(string domain)
{
WebClient webClient = new WebClient();
byte[] bytes = awaitwebClient.DownloadDataTaskAsync("http://" + domain + "/
favicon.ico");
Image imageControl = MakeImageControl(bytes);
m_WrapPanel.Children.Add(imageControl);
}