C# 程序中await位置不同耗时测试

67 阅读1分钟

本篇文章是对C#异步编程一个耗时测试记录,为了强化记忆而写。以前弄明白了,现在又遇到,结果又不会用了。 开始代码 写两个方法 方法一 延迟5秒

     static public async Task T3()
        {
            Console.WriteLine("T3开始"+DateTime.Now);
            await Task.Delay(5000);
            Console.WriteLine("T3结束" + DateTime.Now);
            
        }

方法二 延迟2秒

     static public async Task<int> T6()
        {
            Console.WriteLine("T6开始" + DateTime.Now);
            await Task.Delay(2000);
            Console.WriteLine("=======测试6666==========");
            Console.WriteLine("T6结束" + DateTime.Now);
            return 2;
        }

测试1

首先测试 await 放到每个方法前,这是同步方法

      public static void myTestAA()
        {
            Console.WriteLine(DateTime.Now);

            Task.Run(async () =>
            {
               await T3();//5;
               await T6();//2 总共7秒
            });
           Task.Delay(10000);//等两个方法运行完成
            Console.WriteLine(DateTime.Now);
        }

测试结果截图

image.png 两个方法运行完毕,耗时是7秒钟

测试2

每个方法前定义一个变量接受,然后统一 把 await 放到每个变量前,这是异步方法,代码如下

   public static void myTestAA()
        {
            Console.WriteLine(DateTime.Now);

            Task.Run(async () =>
            {
                var t1 = T3();
                var t2 = T6();
                await t1;
                await t2;//总共5秒
            });
            Task.Delay(10000);//等两个方法运行完成
            Console.WriteLine(DateTime.Now);
        }

测试结果截图

image.png 两个方法运行完毕,耗时是5秒钟

总结

await位置不同,可以使方法变成不同类型,即同步异步。同步耗时更多,异步耗时更少。使用过程中需要注意await的位置。不要把想异步执行的结果写成了同步。