await/async是一个出现在C#5.0、.NetFramework4.5后的一个新语法,是一个语法糖。它本身并不会产生新的线程,但是依托与Task而存在,所以程序执行时也是多线程的。
await只能出现在task前面,但是方法必须声明async,不能单独出现
举例:
private static void Show()
{
Console.WriteLine($"This is Show start:{Thread.CurrentThread.ManagedThreadId}");//1
AsyncMenths asyncMenths = new AsyncMenths();
_ = asyncMenths.ReturnTaskAsync();
Console.WriteLine($"This is Show end:{Thread.CurrentThread.ManagedThreadId}");//1
}
public async Task ReturnTaskAsync()
{
Console.WriteLine($"This is ReturnTask start:{Thread.CurrentThread.ManagedThreadId}");//1
Task task = Task.Run(() =>
{
Console.WriteLine($"This is Task start:{Thread.CurrentThread.ManagedThreadId}");//8
Thread.Sleep(1000);
Console.WriteLine("****************");
Console.WriteLine($"This is Task end:{Thread.CurrentThread.ManagedThreadId}");//8
});
await task;
Console.WriteLine($"This is ReturnTask end:{Thread.CurrentThread.ManagedThreadId}");//8
}
执行结果:
加了await 就等于将await后面的代码,包装成一个回调。
最终Console.WriteLine($"This is ReturnTask end:{Thread.CurrentThread.ManagedThreadId}");是由Task子线程完成的。