"""测试用异步任务轮询工具""" import asyncio from typing import Any, Dict, Optional async def poll_task_until_terminal( client, task_id: str, *, max_rounds: int, interval: float, ) -> Optional[Dict[str, Any]]: """轮询任务直到终态或超时。返回最后一次 task data。""" task_data = None for _ in range(max_rounds): await asyncio.sleep(interval) res = await client.get(f"/api/tasks/{task_id}") assert res.status_code == 200 task_data = res.json()["data"] if task_data["status"] in ("completed", "failed", "cancelled"): break return task_data