上篇对[foreach]的浅究到发现[yield]写完后,觉得对[yield]还没有理解清楚,想起曾经看过一位大牛的帖子讲的很深刻(链接在此),回顾了下,在这里写出自己的理解,与各位分享。

一、通常的异步

  现在我们假设一种平时经常遇到的情况,现有三个方法,其中funcOne和funcTwo比较耗时需要异步执行,而且他们的逻辑是必须在funcOne执行完后才可以执行funcTwo,同理funcTwo执行完后才能执行funcThree。

  按照这样的设定,通常的做法请看代码段[1]:

 1      public class Program
 2      {
 3          public delegate void CallBack(string nextName);
 4          public void funcOne(CallBack callback)
 5          {
 6              ThreadPool.QueueUserWorkItem((state1) =>
 7              {
 8                  Console.WriteLine("[One] async Continue!");
 9                  Console.WriteLine("[One] do something!");
10                  callback("Called Two");
11              });
12          }
13          public void funcTwo(CallBack callback)
14          {
15              ThreadPool.QueueUserWorkItem((state2) =>
16                     {
17                         Console.WriteLine("[Two] async Continue!");
18                         Console.WriteLine("[Two] do something!");
19                         callback("Called Three");
20                     });
21          }
22          public void funcThree(CallBack callback)
23          {
24              Console.WriteLine("[Three] do something!");
25              callback("Called ...");
26          }
27          static void Main()
28          {
29              Program p = new Program();
30              p.funcOne((name1) =>
31              {
32                  Console.WriteLine(name1);
33                  p.funcTwo((name2) =>
34                  {
35                      Console.WriteLine(name2);
36                      //执行funcThree
37                      p.funcThree((name3) =>
38                      {
39                          Console.WriteLine(name3);
40                          //当然还有可能继续嵌套
41                          Console.WriteLine("End!");
42                      });
43                  });
44              });
45              Console.Read();
46          }
47      }
异步的通常实现

相关文章: