You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

asyncio调用create_task创建任务后始终不await会发生什么?

问题解答

1. 为什么未调用await,任务依然会开始运行?

调用asyncio.create_task()时,协程会被封装为任务直接提交到当前活跃的事件循环的待执行队列中,只要事件循环处于运行状态,调度到该任务时就会自动执行。await的作用仅为等待任务执行完成、获取返回值或者捕获任务抛出的异常,并不是触发任务执行的必要条件。

2. 为什么任务运行到sleep步骤后就停止了?

asyncio.run()的执行逻辑为:启动事件循环 → 运行传入的主协程(即你代码中的test())→ 主协程执行完成后,立刻关闭整个事件循环,销毁所有未完成的任务。
你的test()协程在创建完任务后没有其他逻辑,会立刻执行结束。此时simple_task刚运行到await asyncio.sleep(2)并交出控制权,事件循环检测到主协程已经跑完,没有需要继续等待的任务,会直接启动销毁流程,还没等到sleep(2)返回,整个任务就被取消了,因此不会打印after sleeping,程序直接退出。

如果需要任务持续运行,可以在test()末尾添加await task,事件循环会持续等待该死循环任务执行,不会提前关闭。

内容的提问来源于stack exchange,提问作者Tamir Gefen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:27:00