如果我有以下内容:
async def foo():
for i in range(10):
print "1"
await asyncio.sleep(1)
async def bar()
t = asyncio.ensure_future(foo())
while not t.done():
print("waiting")
await asyncio.sleep(0.5)
async def baz():
t = asyncio.ensure_future(bar())
await asyncio.sleep(2.5)
t.cancel()
当在一个较大的事件循环中调用baz()
时,如何确保取消foo()
?
await task
或task.result()
将立即引发task.exception()
(如果有的话)。这样行得通吗? - VincentCancelledError
,对吗?我能安全地忽略它吗,还是这会使得忽略任务有时无法取消? - Ericawait task
和await foo()
的工作方式也是如此。 - Vincent[...] 它可能是一个捕获并忽略取消的任务,因此我们可能需要稍后再次取消它。
- Vincent