.net 4.5 中增加了async/await,使寫異步代碼能像寫同步代碼那樣,甚至偽同步執行,真是個非常好用的東西。不過,有時候我們會希望這些異步代碼能偽同步執行,有時候又希望能真異步執行。所以async/await有很多種搭配來實現這些功能,總共有3種搭配。
代碼:
private static async void test() { ff0(); await ff1(); ff2(); } private static async void ff0() { await Task.Run(() => { Thread.Sleep(1000); Console.WriteLine("Welcome to ff0"); }); Console.WriteLine("Leave ff0"); } private static async Task ff1() { await Task.Run(() => { Thread.Sleep(1000); Console.WriteLine("Welcome to ff1"); }); Console.WriteLine("Leave ff1"); } private static void ff2() { Task task = Task.Run(() => { Thread.Sleep(1000); Console.WriteLine("Welcome to ff2"); }); Console.WriteLine("Leave ff2"); }
結果:
Welcome to ff0
Welcome to ff1
Leave ff0
Leave ff1
Leave ff2
Welcome to ff2
結論:
1.並沒有等待ff0運行完成才運行ff1,但是ff0方法內部是偽同步執行的,也就是說如果你想讓方法內偽同步執行而外面異步執行的話就像ff0那樣寫。
2.ff2的運行是等待ff1運行完成之后才運行的,也就是說如果你想讓方法內外都偽同步執行的話就像ff1那樣寫。
3.在ff2中代碼完全沒有順序運行,也就是說如果你想讓代碼異步執行的話就像ff2那樣寫。