Непонятно с async-await в C#
В букваре есть пример https://docs.microsoft.com/en-us/dotnet/csharp/programming...
01 Task<Egg> eggsTask = FryEggsAsync(2); 02 Task<Bacon> baconTask = FryBaconAsync(3); 03 Task<Toast> toastTask = ToastBreadAsync(2); 04 Toast toast = await toastTask; 05 ApplyButter(toast); 06 ApplyJam(toast); 07 Console.WriteLine("toast is ready"); 08 Juice oj = PourOJ(); 09 Console.WriteLine("oj is ready"); 10 Egg eggs = await eggsTask; 11 Console.WriteLine("eggs are ready"); 12 Bacon bacon = await baconTask; 13 Console.WriteLine("bacon is ready"); 14 Console.WriteLine("Breakfast is ready!");
Отвечать без запуска кода!
Допустим, что все задачи в вызываемых асинхронных методах настолько долгие, что код успевает дойти до последней строки. Вопрос, каков порядок выполнения строк кода?
Мой вариант, код выполняется до первого await, затем пропускаются все строки до следующего await или до конца метода, и выполнение тут же продолжается дальше. Т.е.
1
2
3
4
10
12
И далее по мере выполнения ожидаемых задач выполняются строки
4-9
10-11
12-14
Причём если задачи выполнились почти одновременно, то эти группы строк могут выполняться параллельно в нескольких потоках.
При этом если последний await выполнился быстрее всех, то сообщение "Breakfast is ready!" выведется ещё до окончания других задач.
Всё верно?