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

Python中如何await任务列表 实现C# Task.WhenAll等效效果?

Python 实现等价于 C# Task.WhenAll 功能的方法

Python 标准库asyncio中的asyncio.gather()就是和C# Task.WhenAll逻辑完全对等的方法,支持并发调度所有传入的可等待任务,等待全部任务执行完毕后,按传入顺序返回对应结果的列表。

你当前写的循环await写法存在逻辑问题:

逐次循环await协程是串行执行逻辑:必须等前一个协程完全执行结束,才会启动下一个协程,没有任何并发效果,和Task.WhenAll并发执行所有任务、统一等待完成的行为完全不符。

基础用法

import asyncio

async def main():
    coroutines = ...  # 你的协程列表
    # 并发执行所有协程,等待全部完成
    results = await asyncio.gather(*coroutines)
    # results 为和传入协程顺序一一对应的执行结果列表

补充说明

  • 如果你传入asyncio.gather()的是原生协程对象,方法会自动将其包装为Task对象调度执行,无需手动提前创建任务
  • 默认情况下如果某个任务抛出异常,gather()会立即抛出该异常,其余未完成的任务不会自动取消;如果需要把异常也作为结果统一收集,可以传入参数return_exceptions=True,异常对象会和正常返回值一起放到结果列表里,后续可以统一处理
  • Python 3.11+ 版本新增了asyncio.TaskGroup,用结构化并发的方式实现相同逻辑,异常处理更安全,示例如下:
import asyncio

async def main():
    coroutines = ...  # 你的协程列表
    async with asyncio.TaskGroup() as tg:
        tasks = [tg.create_task(coro) for coro in coroutines]
    # 退出上下文管理器时会自动等待所有任务执行完成,任意任务抛出异常时会自动取消其余所有任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:27:25