(original) (raw)

On Wed, Apr 22, 2015 at 5:12 PM, Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
Guido van Rossum wrote:
On Wed, Apr 22, > OTOH I'm still struggling with what you have to do to wrap a coroutine in a Task, the way its done in asyncio by the Task() constructor, the loop.create\_task() method, and the async() function

That's easy. You can always use costart() to adapt a cofunction
for use with something expecting a generator-based coroutine,
e.g.

codef my\_task\_func(arg):
...

my\_task = Task(costart(my\_task\_func, arg))

If you're willing to make changes, Task() et al could be made to
recognise cofunctions and apply costart() where needed.
Hm, that feels backwards incompatible (since currently I can write Task(my\_task\_func(arg)) and also a step backwards in elegance (having to pass the args separately).

OTOH the benefit is that it's much harder to accidentally forget to wait for a coroutine. And maybe the backward compatibility issue is not really a problem because you have to opt in by using codef or async def.

So I'm still torn. :-)

Somebody would need to take a mature asyncio app and see how often this is used (i.e. how many place would require adding costart() as in the above example).

--
--Guido van Rossum (python.org/\~guido)