异步任务取消.是同步的



我知道task.cancel()安排在任务函数中抛出异常。这是以同步方式发生的吗?(因为我不等待任务.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()

可以 任务.cancel(( 行后面的代码假设任务将 不再运行?

不。 task.cancel()仅标记稍后要取消的任务。您应该在任务之后显式等待任务并捕获CancelledError以确保任务被取消。

请参阅此处的示例。

最新更新