asyncio: another Future example using add_done_callback()
diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst
index 360acc9..8dede87 100644
--- a/Doc/library/asyncio-task.rst
+++ b/Doc/library/asyncio-task.rst
@@ -409,8 +409,8 @@
* ``wait_task()`` stops the event loop when ``print_sum()`` is done.
-Example: Future and get result
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Example: Future with run_until_complete()
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Example combining a :class:`Future` and a :ref:`coroutine <coroutine>`::
@@ -432,3 +432,35 @@
coroutine is responsible of the computation. The event loop is notified when
the future is done (see the :meth:`Future.set_result` method).
+Example: Future with run_until_complete()
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The previous example can be written differently using the
+:meth:`Future.add_done_callback` method::
+
+ import asyncio
+
+ @asyncio.coroutine
+ def slow_operation(future):
+ yield from asyncio.sleep(1)
+ future.set_result('Future in done!')
+
+ def exit(future):
+ print(future.result())
+ loop.stop()
+
+ loop = asyncio.get_event_loop()
+ future = asyncio.Future()
+ asyncio.Task(slow_operation(future))
+ future.add_done_callback(exit)
+ loop.run_forever()
+ loop.close()
+
+The future is now responsible to display the result and stop the loop using the
+``exit()`` callback.
+
+.. note::
+ The coroutine is only executed when the event loop starts running, so it is
+ possible to add a "done callback" to the future after creating the task
+ scheduling the coroutine.
+