C# async/await、WhenAll、ContinueWith 實戰應用(異步做早餐)


業務需求說明:

現在我需要做早餐,實現烤面包,烤培根,搞點番茄醬,開吃這幾個步驟,烤面包和考培根為了節省時間可以同時操作,然后等這兩個做完在搞點番茄醬就可以開飯了。

異步,多任務怎么實現呢

下面通過使用 async/await、WhenAll、ContinueWith 來講解

class Program
    {
        static async Task Main(string[] args)
        {
              Console.WriteLine("開始做早餐--------");
            //烤面包
            Task toast = Toast();
            //烤培根
            Task bakedBacon = BakedBacon();
            //等待這兩個任務完成之后搞點番茄醬就可以開吃了。
            await Task.WhenAll(toast, bakedBacon).ContinueWith(async (t) =>
             {
                 await AddSauce();
                 Console.WriteLine("開吃");
             });
        }
    }

烤面包異步方法

        /// <summary>
        /// 開始烤面包
        /// </summary>
        /// <returns></returns>
        public static async Task Toast()
        {
            await Task.Run(async () =>
            {
                Console.WriteLine("正在烤面包!");
                await Task.Delay(4000);
                Console.WriteLine("結束烤面包!");
            });
        }

烤培根異步方法

      /// <summary>
        /// 烤培根
        /// </summary>
        /// <returns></returns>
        public static async Task BakedBacon()
        {
            await Task.Run(async () =>
            {
                Console.WriteLine("正在烤培根!");
                await Task.Delay(2000);
                Console.WriteLine("結束烤培根!");
            });
        }

搞點番茄醬異步方法

     /// <summary>
        /// 番茄醬
        /// </summary>
        /// <returns></returns>
        public static async Task AddSauce()
        {
            await Task.Run(async () =>
            {
                Console.WriteLine("來點番茄醬!");
                await Task.Delay(1000);
                Console.WriteLine("番茄醬搞定!");
            });
        }

 運行結果:

 


免責聲明!

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



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