1.异步相对的概念 同步
同步方法例子
class Program
{
static void Main(string[] args)
{
Test1();
Console.WriteLine("方法间隔-----");
Test2();
Console.ReadLine();
}
void Test1()
{
Console.WriteLine("Test1开始");
}
void Test2()
{
Console.WriteLine("Test2开始");
}
}
以上代码为普通输出的同步方法,输出的顺序是:
Test1开始
Console.WriteLine("方法间隔-----------");
Test2开始
异步方法例子
class Program
{
static void Main(string[] args)
{
Test1();
Console.WriteLine("方法间隔-----");
await Test2();
Console.ReadLine();
}
void async Test1()
{
Console.WriteLine("Task1开始");
await Task.Run(() =>
{
Thread.Sleep(2000);
});
Console.WriteLine("Task1结束");
}
void async Test2()
{
Console.WriteLine("Task2开始");
await Task.Run(() =>
{
Thread.Sleep(2000);
});
Console.WriteLine("Task2结束");
}
}
以上的改变点 如下图:主要表现为async和await两个关键字,这就是 异步方法的标志
首先解释一下async async是为await的服务的 async提示编译器方法中可能存在await关键字,实际上不需要过分关注,当你方法内出现await的时候 方法没有出现async关键字,vs会有相应提示补全的。所以,让我们主要关注这个await关键字。await的意思:线程按照顺序执行await处立即返回上一层方法,await后续的部分必须等 await提示的方法执行完后才能继续;await只能出现在返回值为 Task的方法调用处;
这里还要我们知道一些前置的知识:
a、一个方法调用另一方法的本质,本质上可以认为所有的代码写在一个方法里
同步方法的例子如下
异步方法的例子如下 我想用流程示意图来表示
总结:方法内出现await,是提示该方法调用者,执行到await处开启新线程(不需要程序员写出开启新线程的方法,编译器在编译的时候会完成相应的代码),然后马上跳出该方法,继续执行。