Вход на сайт
Непонятно с async-await в C# - 2
1777 просмотров
Перейти к просмотру всей ветки
Последний раз изменено 31.08.21 10:50 (alex445)
Удалите эту тему, пожалуйста Непонятно с async-await в C# - Программирование (germany.ru)
Вот задачка - что выведет код? Можно без временных меток (их для удобства просто добавил) - просто в какой последовательности сообщения будут?
class Program { static DateTime _startTime; static async Task Main(string[] args) { _startTime = DateTime.Now; var wait1 = Wait1(); var wait2 = Wait2(); var wait3 = Wait3(); await wait1; Console.WriteLine("after wait1"); await wait2; Console.WriteLine("after wait2"); await wait3; Console.WriteLine("after wait3"); } static async Task Wait1() { await Task.Delay(3000); Console.WriteLine($"wait1 is ready {(DateTime.Now - _startTime).Seconds}"); } static async Task Wait2() { await Task.Delay(2000); Console.WriteLine($"wait2 is ready {(DateTime.Now - _startTime).Seconds}"); } static async Task Wait3() { await Task.Delay(1000); Console.WriteLine($"wait3 is ready {(DateTime.Now - _startTime).Seconds}"); } }
У меня выводит
wait3 is ready 1
wait2 is ready 2
wait1 is ready 3
after wait1
after wait2
after wait3
и я не понимаю, почему. Я думал, что сообщения должны выводиться в той же последовательности, в которой заканчиваются выполняться таски. Т.е.
wait3 is ready 1
after wait3
wait2 is ready 2
after wait2
wait1 is ready 3
after wait1