New submission from JustAnotherArchivist <justanotherarchiv...@riseup.net>:

While the situation is clear regarding coroutine objects (#25887), as far as I 
can see, the documentation doesn't specify whether asyncio.Futures can be 
awaited multiple times. The code has always (at least since the integration 
into CPython) allowed for it since Future.__await__ simply returns 
Future.result() if it is already done. Is this guaranteed/intended behaviour, 
as also implied by some of the comments on #25887, or is it considered an 
implementation detail?

Here are the only two things I found in the documentation regarding this:

> library/asyncio-task: When a Future object is awaited it means that the 
> coroutine will wait until the Future is resolved in some other place.

> library/asyncio-future: Future is an awaitable object. Coroutines can await 
> on Future objects until they either have a result or an exception set, or 
> until they are cancelled.

Neither of these say anything about awaiting a Future that is already resolved, 
i.e. has a result, has an exception, or was cancelled.

If this is intended to be guaranteed, it should be mentioned in the Future 
documentation. If it is considered an implementation detail, it's probably not 
necessary to explicitly mention this anywhere, but it might be a good idea to 
add another line to e.g. the asyncio.wait example on how to correctly retrieve 
the result of an already-awaited Future/Task.

----------
components: asyncio
messages: 373504
nosy: JustAnotherArchivist, asvetlov, yselivanov
priority: normal
severity: normal
status: open
title: Clarify whether Futures can be awaited multiple times
type: enhancement

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41275>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to