Вы можете подойти к этому следующим образом:
import asyncio
async def do_while_idle():
for _ in range(3):
print("IDLE")
await asyncio.sleep(1)
return "Done stuff while idling"
async def long_task():
await asyncio.sleep(3)
return "DONE !"
async def main():
task = asyncio.create_task(long_task())
task2 = asyncio.create_task(do_while_idle())
done, _ = await asyncio.wait({task, task2})
if task in done:
task2.cancel()
print(task.result())
asyncio.run(main())
Еще одна задача должна быть на холостом ходу, этот фрагмент ожидает завершения задания long_task и отменяет задачу на холостом ходу. Вы также можете проверить, завершен ли режим холостого хода и long_task следующим образом:
async def main():
task = asyncio.create_task(long_task())
task2 = asyncio.create_task(do_while_idle())
done, _ = await asyncio.wait({task, task2})
if task and task2 in done:
print(task.result(), task2.result())
Первый фрагмент кода даст вам желаемый результат:
IDLE
IDLE
IDLE
DONE !