Когда вы инкапсулируете сопрограмму в объекте Task (или Future), сопрограмма готова к работе, поэтому, когда цикл событий запускается с первого ожидания, запускаются и task1, и task2.
Чтобы сделать его более понятным, для выполнения сопрограммы вам понадобятся две вещи:
1) сопрограмма, инкапсулированная в будущем объекте (Task), чтобы сделать ее ожидаемой
2) работающий цикл обработки событий
В вашем примере выполнение работает следующим образом:
1 - create_task1
2 - create_task2
3 - ожидание задачи1
4 - ожидание сна задачи1
5 - ожидание сна задачи2
теперь и задача 1, и задача 2 спят, поэтому предположим, что задача 1 завершается первой (некоторое время спит)
6 - печать задачи 1
7 - ожидание задачи 2
8 - печатьof task2
теперь конец цикла
Как вы сказали, когда вы получили ожидание, выполнение останавливается, но позвольте мне сказать, что оно останавливается только в текущем «потоке выполнения», когда высоздать будущее (Задача), вы создаете другое exucution fнизкий, и в ожидании просто переключиться на текущий поток выполнения.Это последнее объяснение не совсем правильно в смысле терминов, но помогает прояснить его.
Надеюсь, я был ясен.PS: извините за мой плохой английский.