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("番茄酱搞定!");
            });
        }

 运行结果:

原文地址:https://www.cnblogs.com/ZhengHengWU/p/13502583.html