Позвольте мне просто опубликовать простой пример:
private void MyMethod()
{
Task task = MyAsyncMethod();
task.Wait();
}
private async Task MyAsyncMethod()
{
//Code before await
await MyOtherAsyncMethod();
//Code after await
}
Допустим, я запускаю приведенный выше код в однопоточном приложении, например в консольном приложении. Мне трудно понять, как код //Code after await
сможет работать.
Я понимаю, что когда я нажимаю ключевое слово await
в элементе управления MyAsyncMethod()
, происходит возврат к MyMethod()
, но затем я блокирую поток с помощью task.Wait()
. Если поток заблокирован, как вообще может работать //Code after await
, если поток, который должен принять его, заблокирован?
Создается ли новый поток для запуска //Code after await
? Или основной поток волшебным образом выходит из task.Wait()
для запуска //Code after await
?
Я не уверен, как это должно работать?