mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-12 03:33:38 +00:00
30 lines
727 B
Python
30 lines
727 B
Python
from __future__ import annotations
|
|
|
|
from collections.abc import Awaitable, Callable
|
|
|
|
|
|
AsyncCloser = Callable[[], Awaitable[None]]
|
|
|
|
|
|
async def close_in_order(*closers: AsyncCloser) -> None:
|
|
"""
|
|
Run async closers in order and raise the first error, if any.
|
|
|
|
Notes
|
|
-----
|
|
- Used to keep driver-specific close logic readable.
|
|
- We intentionally do not stop at first failure, so later resources
|
|
still get a chance to close.
|
|
"""
|
|
first_error: Exception | None = None
|
|
|
|
for closer in closers:
|
|
try:
|
|
await closer()
|
|
except Exception as exc:
|
|
if first_error is None:
|
|
first_error = exc
|
|
|
|
if first_error is not None:
|
|
raise first_error
|