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

线性代码与非线性代码

  大部分的软件工程师习惯于用线性的思想格局去编程,也许是从他们最先职业生涯的时候就被如此教育。当接纳使用线性思维的主意去编写一个顺序的时候,这意味它的源码在翻阅的时候有点像图
1 。这若是大家有一个订单系统将扶持大家从某处获取一批订单。

图片 1

  

  即便著作从左或从右开头,我们依然习惯于从上往下阅读。假如有一些事物影响到了这块内容的一一,我们将会觉得很纳闷,同时在这种题材的地点耗费更多的年月与肥力,尽管它没有这些必要。基于事件的应用程序平时所有这多少个非线性的组织。

  基于事件的连串流程,它在接触的同时,期待回到结果,图2
很形象的表述了这一点。初看这两个类别似乎区别不大,但假若我们只要GetAllOrders再次来到void ,这样检索订单列表就不是那么直截了当了。

  不看其实的代码,我们以为线性方法处理起来更舒心,也不便于出错。在这种状态下,错误可能不是运行时的错误或者编译时的错误,而是在动用的时候出错:由于缺乏清醒的认识。

  基于事件的办法还有一个很大的优势,它让我们与利用基于事件的异步格局更契合。

 

图片 2

 

  在你看到一个办法的时候,你会有种想弄精通该措施的兴奋。这意味一旦有一个叫
ReloadOrdersAndRefreshUI
的法子,你会去想弄通晓加载订单的场馆,咋样把它进入到UI,和当方法截止的时候会生出哪些工作。在按照事件的主意里,这贯彻起来相比较难。

  此外一个便宜是,只要在我们触发 LoadOrdersCompleted
事件时,我们就可知在 GetAllOrders 里编写异步代码,并赶回到调用线程中去。

 

介绍一种新的格局

  如若,我们在融洽的体系上工作,系统接纳方面提到过的 OrderHandler
,以及在骨子里中实践的是采纳一个线性方法。为了模仿真实订单系统的一小部分,OrderHandler
和 Order 如下:

 1 class Order
 2 {
 3     public string OrderNumber { get; set; }
 4     public decimal OrderTotal { get; set; }
 5     public string Reference { get; set; }
 6 }
 7 class OrderHandler
 8 {
 9     private readonly IEnumerable<Order> _orders;
10     public OrderHandler()
11     {
12         _orders = new[]
13                 {
14                     new Order {OrderNumber = "F1", OrderTotal = 100, Reference = "Filip"},
15                     new Order {OrderNumber = "F1", OrderTotal = 100, Reference = "Filip"}
16                 };
17     }
18     public IEnumerable<Order> GetAllOrders()
19     {
20         return _orders;
21     }
22 }

 

  因为大家在演示中不采取真实的数据源,大家可以为它扩展点乐趣。这是有关异步编程的,我们想要在一个异步情势中呼吁一些东西。为了对此模拟,我们简要的插足:

1 System.Threading.ManualResetEvent(false).WaitOne(2000) in GetAllOrders:
2 public IEnumerable<Order> GetAllOrders()
3 {
4     System.Threading.ManualResetEvent(false).WaitOne(2000);
5     return _orders;
6 }

 

–整理中–


【原文】http://www.dotnetcurry.com/csharp/869/async-await-csharp-dotnet

C# 5.0 中的 Async 和 Await

【博主】反骨仔    【本文】http://www.cnblogs.com/liqingwen/p/6069062.html

  伴随着 .NET 4.5 和 Visual Studio 2012 的 C# 5.0
,咱们可以使用的新的异步格局,这里提到到 async 和 await
关键字。有成千上万不同点的看法,比起在此以前我们所见到的代码,它的可读性和实用性是否更加优异。大家将经过一个事例,看看它与当前的做法有何“与众不同”。

 

相关文章