using the provided *custom_task_constructor* when creating a new task instead
of the default :class:`Task`.
+ *custom_task_constructor* must be a *callable* with the signature matching
+ the signature of :class:`Task.__init__ <Task>`.
+ The callable must return a :class:`asyncio.Task`-compatible object.
+
+ This function returns a *callable* intended to be used as a task factory of an
+ event loop via :meth:`loop.set_task_factory(factory) <loop.set_task_factory>`).
+
.. versionadded:: 3.12
Task Object
===========
-.. class:: Task(coro, *, loop=None, name=None, context=None)
+.. class:: Task(coro, *, loop=None, name=None, context=None, eager_start=False)
A :class:`Future-like <Future>` object that runs a Python
:ref:`coroutine <coroutine>`. Not thread-safe.
If no *context* is provided, the Task copies the current context
and later runs its coroutine in the copied context.
+ An optional keyword-only *eager_start* argument allows eagerly starting
+ the execution of the :class:`asyncio.Task` at task creation time.
+ If set to ``True`` and the event loop is running, the task will start
+ executing the coroutine immediately, until the first time the coroutine
+ blocks. If the coroutine returns or raises without blocking, the task
+ will be finished eagerly and will skip scheduling to the event loop.
+
.. versionchanged:: 3.7
Added support for the :mod:`contextvars` module.
.. versionchanged:: 3.11
Added the *context* parameter.
+ .. versionchanged:: 3.12
+ Added the *eager_start* parameter.
+
.. method:: done()
Return ``True`` if the Task is *done*.