From 9e8c61b8d999342c8104099fbd446a906f02ee73 Mon Sep 17 00:00:00 2001 From: ProgramRipper Date: Sat, 11 Jun 2022 16:20:36 +0800 Subject: [PATCH] Update __init__.py --- src/graia/broadcast/__init__.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/graia/broadcast/__init__.py b/src/graia/broadcast/__init__.py index 33495e4..9873a1a 100644 --- a/src/graia/broadcast/__init__.py +++ b/src/graia/broadcast/__init__.py @@ -2,7 +2,7 @@ import sys import traceback from contextlib import asynccontextmanager -from typing import Callable, Dict, Iterable, List, Optional, Type, Union +from typing import Callable, Dict, Iterable, List, Optional, Set, Type, Union from graia.broadcast.builtin.derive import DeriveDispatcher from graia.broadcast.entities.dispatcher import BaseDispatcher @@ -53,6 +53,8 @@ class Broadcast: prelude_dispatchers: List["T_Dispatcher"] finale_dispatchers: List["T_Dispatcher"] + _background_tasks: Set[asyncio.Task] = set() + def __init__( self, *, @@ -257,7 +259,7 @@ async def param_compile( dii.ctx.reset(dii_token) def postEvent(self, event: Dispatchable, upper_event: Optional[Dispatchable] = None): - return self.loop.create_task( + task = self.loop.create_task( self.layered_scheduler( listener_generator=self.default_listener_generator(event.__class__), event=event, @@ -268,6 +270,9 @@ def postEvent(self, event: Dispatchable, upper_event: Optional[Dispatchable] = N else [], ) ) + self._background_tasks.add(task) + task.add_done_callback(self._background_tasks.discard) + return task @staticmethod def event_class_generator(target=Dispatchable):