В первом фрагменте вы сразу ожидаете каждую созданную вами задачу. В результате задачи не могут выполняться параллельно.
Во втором фрагменте вы создаете три задачи и только после этого начинаете ожидать. Это позволяет всем трем параллельно работать, несмотря на то, что вы await
указали, что вас интересует результат первого. (Возможность выполнения других задач в ожидании результатов определенной c одной из основных целей разработки таких библиотек, как asyncio.)
Другими словами, await t1
не означает "запуск * 1007". * ", это означает" приостановить меня и раскрутить событие l oop, пока t1
не будет сделано ". Разница не имеет ничего общего с задачами, хранящимися в переменных, но с одновременным созданием задач. Например, вы можете изменить второй пример следующим образом:
t4 = asyncio.create_task(do_something(4, sleep=4))
await t4
t5 = asyncio.create_task(do_something(5, sleep=3))
await t5
t6 = asyncio.create_task(do_something(6, sleep=2))
await t6
... и вы получите поведение, подобное первому примеру.