Объясните как под капотом работает метод start_polling у aiogram3 в связке с обычным запуском асинхронных задач через asyncio?

Есть следующая функция запускаемая через asyncio.run(main())

async def main():
    bot = Bot(token)
    dp = Dispatcher()
    task = asyncio.create_task(monitor_remind())#такой конструкцией создается подзадача
    await task # и мы ожидаем ее полного выполнения без нее если в коде встречается await asyncio.sleep(5) оставшийся код в этой функции не выполняется 
    await dp.start_polling(bot)

Но если мы запустим код, бот не запустится и будет работать только запущенная функция "monitor_remind()".
Код "monitor_remind()"

async def monitor_remind():
    while True:
        print("test")
        await asyncio.sleep(5)  

                                                              

При запуске же такова кода все отлично работает:

   async def main():
        bot = Bot(token)
        dp = Dispatcher()
        asyncio.create_task(monitor_remind())
        await dp.start_polling(bot)

И при запуске этого кода в функции "monitor_remind()" при встрече await asyncio.sleep(5) код продолжает работать. Объясните пожалуйста как это под капотом работает и из-за чего так получается.


Ответы (1 шт):

Автор решения: eri
await task # и мы ожидаем ее полного выполнения

бот не запустится до окончиания "ожидаем ее полного выполнения". не нужно ожидать тасков с вечными циклами - пусть живут сами по себе

→ Ссылка