Я создал простой пример для понимания async / await в C#.
class Program
{
static void Main(string[] args)
{
var t = BarAsync();
Console.WriteLine("Main");
}
private static async Task BarAsync()
{
Console.WriteLine("This happens before await");
int i = await QuxAsync();
Console.WriteLine("This happens after await. This result of await is " + i);
}
private static Task<int> QuxAsync()
{
int c = 0;
for (int i = 0; i < int.MaxValue; i++)
{
c++;
}
Console.WriteLine("in the middle processing...");
return Task.FromResult(c);
}
}
Итак, программа сначала печатает This happens before await
, а затем подсчитывает значение из метода возврата. После этого он печатает результат.
Выглядит хорошо. Мой вопрос заключается в том, что поскольку await не блокирует поток, который оценивает метод asyn c. Насколько я понимаю, если asyn c займет много времени, он вернется к своему вызывающему методу.
Для моего примера, поскольку QuxAsyn c () занимает много времени, код
Console.WriteLine("Main");
не заблокирован и будет оценен очень скоро. Я думаю, что порядок печати должен быть
This happens before await
Main
in the middle processing...
This happens after await. This result of await is 2147483647
Однако это не так, почему?