Yury Selivanov <yseliva...@gmail.com> added the comment:

>> There's no clear reason to complicate the Task<->coroutine relationship by 
>> allowing to inject arbitrary exceptions into running coroutines.

> My comment was more about CancelledError rather than arbitrary exceptions. 
> You didn't reply to the part of my response saying that Task.cancel() doesn't 
> let you communicate why the task was ended, [..]

I didn't reply because you didn't clearly articulate why the cancellation 
reason is important :)  AFAIK no other async framework allows you to do this.  
So what are those real-world cases that can explain why asyncio should support 
this functionality?

> [..] which is something the removed API's let you do.

Unfortunately they didn't.  They never worked properly; IIRC Task.set_exception 
had never worked at all.  The fact they were available at all was a simple 
oversight.

> Task.set_exception() and Task.set_result() both give you a way to 
> unconditionally end a task. With cancel() though, the docs say, 
> "Task.cancel() does not guarantee that the Task will be cancelled." [1]

Yes, because Task can only signal its coroutine that it was requested to be 
cancelled.  The coroutine may choose to ignore that by swallowing 
CancelledError.

> The reason you might want to unconditionally end a task is if e.g. you 
> already called Task.cancel() and it is still running after waiting a certain 
> amount of time.

Well, if you want to unconditionally end tasks you shouldn't write coroutines 
that ignore CancelledErrors.  If you do, then you clearly *do not want* the 
coroutine to be cancelled, and thus there's no use case for set_exception.

Finally, asyncio has queues, which can be used to build two-way communication 
channels between coroutines and implement whatever advanced cancellation 
mechanism you want.

----------

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

Reply via email to