当前位置: 首页 > 图灵资讯 > 技术篇> async和await用法(Task)

async和await用法(Task)

来源:图灵教育
时间:2023-06-06 09:24:47

要了解async和await的用法,首先要了解task的相关知识,这里就不解释了,因为这不是本文的重点。

假如你已经很了解Task了,那么如何使用async和await,这里主要总结了以下三点:

  1. await操作符只能在async方法中使用;
  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);            });        }

执行结果:

async和await用法(Task)_Test

对结果的解释是:

  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);            });        }