我知道task.cancel()
安排了一个异常,该异常将被抛出到task函数中。这是同步发生的吗? (因为我不等待task.cancel())。 task.cancel()
行后面的代码是否可以假定该任务将不再运行?
一个简单的例子:
async def task1():
await asyncio.sleep(3)
print("after sleep")
async def task2():
t = loop.create_task(task1())
await asyncio.sleep(1)
t.cancel()
# can the following code lines assume that task1 is no longer running?
loop = asyncio.get_event_loop()
loop.run_forever()
答案 0 :(得分:1)
可以在task.cancel()行之后的代码假定该任务将 不再运行?
不。 task.cancel()
仅将任务标记为稍后被取消。您应该在任务之后显式等待任务并捕获CancelledError
,以确保任务已取消。
请参见example here。