让我举一个简单的例子:
private void MyMethod()
{
Task task = MyAsyncMethod();
task.Wait();
}
private async Task MyAsyncMethod()
{
//Code before await
await MyOtherAsyncMethod();
//Code after await
}
假设我在单线程应用程序(如控制台应用程序)中运行上面的代码。我很难理解代码 // await之后的代码
如何能够运行。
我知道当我遇到 await
关键字时,控制权会回到 MyMethod()
,但是我又用 task.Wait()
锁定了线程。如果线程被锁定,那么如果该线程被锁定,如何运行 // await之后的代码
?
是否会创建一个新线程来运行 // await之后的代码
?或者主线程是否会神奇地跳出 task.Wait()
来运行 // await之后的代码
?
我不确定这个应该怎么工作。