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

为何Python会执行未被await的task1?异步代码问题咨询

问题原因与解决方法

核心问题

你调用asyncio.create_task()创建task1和task2时,两个任务会立即被加入事件循环并开始执行,不是只有被await的任务才会启动。

当task1被创建后,事件循环就会开始为它计时1秒,到点就打印hello;而你await task2只是等待它完成(需要2秒),这期间task1早就执行完毕了,所以最终会先输出hello再输出world。

修正方案

如果只想输出world,只需要避免让task1被事件循环调度执行,有两种简单方式:

方式一:不创建task1的任务对象

直接去掉task1的asyncio.create_task()调用,只定义协程对象但不加入事件循环:

import asyncio

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    # 仅定义协程,不加入事件循环执行
    task1 = say_after(1, 'hello')
    task2 = asyncio.create_task(say_after(2, 'world'))
    await task2

asyncio.run(main())

方式二:直接移除task1相关代码

如果不需要task1的逻辑,直接删掉它:

import asyncio

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    task2 = asyncio.create_task(say_after(2, 'world'))
    await task2

asyncio.run(main())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:03:11