上篇对[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 }