async和await用法(Task)

简介: 原文:async和await用法要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:只有在async方法里面才能使用await操作符;await操作符是针对Task对象的;当方法A调用方法B,方法B方法体内又通过await调用方法C时,如果方法C内部有异步操作,则方法B会等待异步操作执行完,才往下执行;但方法A可以继续往下执行,不用再等待B方法执行完。

原文:async和await用法

要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。

如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:

  1. 只有在async方法里面才能使用await操作符;
  2. await操作符是针对Task对象的;
  3. 当方法A调用方法B,方法B方法体内又通过await调用方法C时,如果方法C内部有异步操作,则方法B会等待异步操作执行完,才往下执行;但方法A可以继续往下执行,不用再等待B方法执行完。

 

对于第三点说的有点绕,所以下面结合代码说一下:

复制代码
        static void Main(string[] args)
        {
            Test();
            Console.WriteLine("Test End!");
            Console.ReadLine();
        }

        static async void Test()
        {
            await Test1();
            Console.WriteLine("Test1 End!");
        }


        static Task Test1()
        {
            Thread.Sleep(1000);
            Console.WriteLine("create task in test1");

            return Task.Run(() =>
            {
                Thread.Sleep(3000);
                Console.WriteLine("Test1");
            });
        }
复制代码

 

执行结果:

 

对结果解释是:

  Main方法调用具有async标示的Test方法,Test方法通过await调用Test1方法,当执行顺序执行到Test1时,遇到里面的异步操作;则Test方法会等待Test1里面的异步操作执行完再往下执行;但是Main方法,不用再等待Test方法执行,可以继续往下执行。

 


 

对于上面情况,可以不使用async和await也能实现,代码如下:

复制代码
        static void Main(string[] args)
        {
            Test();
            Console.WriteLine("Test End!");
            Console.ReadLine();
        }

        static void Test()
        {
            var test1=Test1();

            Task.Run(() =>
            {
                test1.Wait();
                Console.WriteLine("Test1 End!");
            });
        }

        static Task Test1()
        {
            Thread.Sleep(1000);

            Console.WriteLine("create task in test1");

            return Task.Run(() =>
            {
                Thread.Sleep(3000);
                Console.WriteLine("Test1");
            });
        }
复制代码

 

目录
相关文章
|
JSON 前端开发 JavaScript
async/await的应用
async/await的应用
66 0
|
7月前
|
前端开发 JavaScript 开发者
阿珊带你深入理解 async/await 函数
阿珊带你深入理解 async/await 函数
|
7月前
|
JSON 前端开发 JavaScript
什么是async和await?
什么是async和await?
61 0
|
7月前
|
JSON 前端开发 JavaScript
|
7月前
|
JSON 前端开发 JavaScript
async/await语法
async/await语法
62 0
|
前端开发
promise ,async/await的基础用法
promise ,async/await的基础用法
|
前端开发
循环中使用async_await
循环中使用async_await,多种方法,按需取用
77 0
|
前端开发
【收藏】五种在循环中使用 async/await 的方法
本篇总结了 5 种在循环中使用 async/await 的方法(代码干货都能在浏览器控制台自测):
|
消息中间件 前端开发 JavaScript
ES8 中的 async/await —— 异步函数
ES8 中的 async/await —— 异步函数
199 0
|
Java Spring 容器
@EnableAsync@Async使用总结
@EnableAsync@Async使用总结
230 0
下一篇
DataWorks