异步任务取消。是同步的吗?
asyncio task cancel. Is is synchronous?
我了解到task.cancel()
在任务函数中安排了一个异常抛出。这是同步发生的吗? (因为我不等待 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()
Can code that follows the line task.cancel() assume that the task will
no longer run?
没有。 task.cancel()
只标记稍后要取消的任务。您应该在它之后显式等待任务并捕获 CancelledError
以确保任务被取消。
参见。
我了解到task.cancel()
在任务函数中安排了一个异常抛出。这是同步发生的吗? (因为我不等待 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()
Can code that follows the line task.cancel() assume that the task will no longer run?
没有。 task.cancel()
只标记稍后要取消的任务。您应该在它之后显式等待任务并捕获 CancelledError
以确保任务被取消。
参见