.net async/await 異步等待的數種情況


.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那樣寫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM