等待 Step 完成
当一个 Flow 会在后台工作结束前产生 durable、可供客户端使用的里程碑时,使用 WaitForStepCompletion。调用方启动 Flow、等待该 Step,然后读取需要的结果。后续 Step 可以继续执行,而无需一直占用调用方。
WaitForStepCompletionFlow 示例会在 PersistData 中持久化记录,再启动 BackgroundWork。它的 controller 在查询已持久化记录前等待 PersistData。只有当一个 Step 已提交了使响应有效的状态后,才应把它选作这个边界。
普通 durable wait 应让 RequestTimeout 保持为 0。在 admission 边界应显式设置它。下面的 runnable controller 暂时保持无限等待,直到它依赖的已发布 SDK 包含这个 API。每个 Flow 允许的并发 wait 数量有上限。详情请参阅选择超时边界。
核心实现
@blueprint.get("/start")
async def start_wait_for_step_completion() -> str:
flow_id = required_query("workflowId")
await app_state.client.start_flow(
app_state.wait_for_step_completion,
flow_id,
JobSeekerData(1),
start_options(),
)
await app_state.client.wait_for_step_completion(
flow_id,
PERSIST_DATA_STEP,
WaitForStepCompletionOptions(),
)
persisted = await app_state.client.invoke_rpc(
app_state.wait_for_step_completion.get_job_seeker_data,
flow_id,
)
payload = json.dumps(asdict(persisted), sort_keys=True)
return f"success for workflow {flow_id} with data {payload}"
例子: examples/python/dex_examples/patterns/wait-for-step-completion/controller.py