Files
Dorod-Sky/skyvern/forge/sdk/utils/aio.py
2025-06-12 16:43:16 +00:00

28 lines
653 B
Python

import asyncio
from typing import Any, Sequence
async def collect(tasks: Sequence[asyncio.Task]) -> list[Any]:
"""
An alternative to 'gather'.
Waits for the first task to complete or fail, cancels others, and propagates
the first exception.
Returns the results of all tasks (if all tasks succeed).
"""
done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
for p in pending:
p.cancel()
await asyncio.gather(*pending, return_exceptions=True)
for task in done:
exc = task.exception()
if exc:
raise exc
return [task.result() for task in done]