Specially raise a `ContextCancelled` for a task-context rpc
parent
7069035f8b
commit
f8e2d4007c
|
@ -28,6 +28,7 @@ from ._exceptions import (
|
|||
unpack_error,
|
||||
ModuleNotExposed,
|
||||
is_multi_cancelled,
|
||||
ContextCancelled,
|
||||
TransportClosed,
|
||||
)
|
||||
from . import _debug
|
||||
|
@ -152,9 +153,12 @@ async def _invoke(
|
|||
task_status.started(cs)
|
||||
await chan.send({'return': await coro, 'cid': cid})
|
||||
|
||||
# if cs.cancelled_caught:
|
||||
# # task was cancelled so relay to the cancel to caller
|
||||
# await chan.send({'return': await coro, 'cid': cid})
|
||||
if cs.cancelled_caught:
|
||||
# task-contex was cancelled so relay to the cancel to caller
|
||||
raise ContextCancelled(
|
||||
f'{func.__name__} cancelled itself',
|
||||
suberror_type=trio.Cancelled,
|
||||
)
|
||||
|
||||
else:
|
||||
# regular async function
|
||||
|
@ -168,7 +172,8 @@ async def _invoke(
|
|||
# TODO: maybe we'll want differnet "levels" of debugging
|
||||
# eventualy such as ('app', 'supervisory', 'runtime') ?
|
||||
if not isinstance(err, trio.ClosedResourceError) and (
|
||||
not is_multi_cancelled(err)
|
||||
not is_multi_cancelled(err)) and (
|
||||
not isinstance(err, ContextCancelled)
|
||||
):
|
||||
# XXX: is there any case where we'll want to debug IPC
|
||||
# disconnects? I can't think of a reason that inspecting
|
||||
|
|
Loading…
Reference in New Issue