bpo-46994: Accept explicit contextvars.Context in asyncio create_task() API (GH-31837)

This commit is contained in:
Andrew Svetlov 2022-03-14 13:54:13 +02:00 committed by GitHub
parent 2153daf0a0
commit 9523c0d84f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 209 additions and 65 deletions

View file

@ -138,12 +138,15 @@ class TaskGroup:
me = BaseExceptionGroup('unhandled errors in a TaskGroup', errors)
raise me from None
def create_task(self, coro, *, name=None):
def create_task(self, coro, *, name=None, context=None):
if not self._entered:
raise RuntimeError(f"TaskGroup {self!r} has not been entered")
if self._exiting and self._unfinished_tasks == 0:
raise RuntimeError(f"TaskGroup {self!r} is finished")
task = self._loop.create_task(coro)
if context is None:
task = self._loop.create_task(coro)
else:
task = self._loop.create_task(coro, context=context)
tasks._set_task_name(task, name)
task.add_done_callback(self._on_task_done)
self._unfinished_tasks += 1