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

     运行结果:

  • 相关阅读:
    00072_System类
    eWebEditor实现word图片自动转存
    wangEditor实现word图片自动转存
    xhEditor实现word图片自动转存
    TinyMCE实现word图片自动转存
    FCKEditor实现word图片自动转存
    CKEditor实现word图片自动转存
    Nginx大文件(百M以上)的上传下载实现技术
    百度WebUploader大文件(百M以上)的上传下载实现技术
    SpringCloud大文件(百M以上)的上传下载实现技术
  • 原文地址:https://www.cnblogs.com/ZhengHengWU/p/13502583.html
Copyright © 2020-2023  润新知