关于async await的测试

async await的教程:https://www.cnblogs.com/zhaoshujie/p/11192036.html

异步方法:

        private async Task<string> TestAsync()
        {
            Console.WriteLine("异步方法开始");
            var task = Task.Run(() =>
            {
                Thread.Sleep(2000);
                Console.WriteLine("在新线程中");
                return "新线程结束";
            });

            var result = await task;
            Console.WriteLine("异步方法结束");

            return result;
        }

调用时不使用await

        public IActionResult Index()
        {
            Console.WriteLine("主线程开始");
            Console.WriteLine("输出结果:" + TestAsync());
            Console.WriteLine("主线程结束");
        }

结果:

1、主线程+异步方法内await之前的代码按顺序执行

2、await开始(开新线程)

3、主线程剩余代码执行,Console.WriteLine("输出结果:" + TestAsync());拿不到TestAsync()的值

4、await结束后,异步方法await后的代码继续执行


 调用时使用await

扫描二维码关注公众号,回复: 7640794 查看本文章
        public async Task<IActionResult> Index()
        {
            Console.WriteLine("主线程开始");
            Console.WriteLine("输出结果:" + await TestAsync());
            Console.WriteLine("主线程结束");
        }

结果:

全部按顺序执行,可以正确拿到返回值

猜你喜欢

转载自www.cnblogs.com/yeagen/p/11746980.html