Ура, к концу вторых суток мучений я победил эту злоебучую связку из asyncio.Task и aiogram.Dispatcher!
Dispatcher всё никак не хотел закрываться и продолжал отвечать на запросы даже после закрытия таска. Не знаю, что не так с aiogram... А ботов должно быть несколько, и создаваться они должны динамически, чтобы юзеры могли сами своих ботов для уведомлений подключать, и Dispatcher в aiogram, кажется, не может динамически ботов подключать / отключать, соответственно, и диспетчеров должно быть несколько...
В общем, тихий ужас. Но я сделал, я молодец.
Причём, когда я полез в aiogram разбираться, почему он там при task.cancel() не закрывается, даже если диспетчер в try... except asyncio.CancelledError обернуть, а пытается перезапустить соединение (вполне успешно), наткнулся на один презабавнейший комментарий:
# In cases when Telegram Bot API was inaccessible don't need to stop polling
# process because some developers can't make auto-restarting of the script
(aiogram/dispatcher/dispatcher.py::217)
То есть из-за того, что кто-то там не может переподключиться при падении соединения, мне нужно устраивать танцы с бубном вместо того, чтобы приказать процессу закрыться. Иначе он сам перезапустится. Нет, удобно, конечно, но блин :)))))))
Причём, когда я полез в aiogram разбираться, почему он там при task.cancel() не закрывается, даже если диспетчер в try... except asyncio.CancelledError обернуть, а пытается перезапустить соединение (вполне успешно), наткнулся на один презабавнейший комментарий:
# In cases when Telegram Bot API was inaccessible don't need to stop polling
# process because some developers can't make auto-restarting of the script
(aiogram/dispatcher/dispatcher.py::217)