【博主】反骨仔 【本文】http://www.cnblogs.com/liqingwen/p/6069062.htmlhtml
大部分的软件工程师习惯于用线性的思惟方式去编程,也许是从他们开始职业生涯的时候就被这样教导。当选择使用线性思惟的方式去编写一个程序的时候,这意味着它的源码在阅读的时候有点像图 1 。这假定咱们有一个订单系统将帮助咱们从某处获取一批订单。编程
基于事件的系统流程,它在触发的同时,期待返回结果,图2 很形象的表达了这点。初看这两个序列彷佛区别不大,但若是咱们假设GetAllOrders返回 void ,这样检索订单列表就不是那么直截了当了。异步
不看实际的代码,咱们认为线性方法处理起来更温馨,也不容易出错。在这种状况下,错误可能不是运行时的错误或者编译时的错误,而是在使用的时候出错:因为缺少清醒的认识。async
基于事件的方法还有一个很大的优点,它让咱们与使用基于事件的异步模式更相符。异步编程
假设,咱们在本身的系统上工做,系统使用上面提到过的 OrderHandler ,以及在实际中执行的是使用一个线性方法。为了模拟真实订单系统的一小部分,OrderHandler 和 Order 以下:spa
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-dotnetcode