Мне интересно, как поток async
работает через стек. При чтении о async
в C#, вы будете постоянно читать некоторые версии следующие:Асинхронное/ожидание поведения через стек
Если задача, которую мы ожидаем еще не завершена, то подпишите вверх остальную часть этого метода, как продолжение этой задачи, и затем немедленно отправьте вашему абоненту; задача будет вызывать продолжение при завершении .
Это возвращение к вашему абоненту сразу часть, которая меня смущает. В приведенном ниже примере, если что-то вызывает MethodOneAsync()
, исполнение попадает в ожидании в MethodOneAsync
. Он сразу возвращается к методу, который называется этим? Если да, то как выполняется MethodTwoAsync
? Или он продолжает работать над стеком, пока не обнаружит, что он фактически заблокирован (то есть DoDBWorkAsync()
), а затем выдаст поток?
public static async Task MethodOneAsync()
{
DoSomeWork();
await MethodTwoAsync();
}
public static async Task MethodTwoAsync()
{
DoSomeWork();
await MethodThreeAsync();
}
public static async Task MethodThreeAsync()
{
DoSomeWork();
await DoDBWorkAsync();
}
Да, ваша версия намного легче читать, чем моя версия (мы в значительной степени говорили то же самое) +1 к вам. –