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

Azure Durable Functions(C#)中处理用户输入错误及重新输入的方案咨询

Azure Durable Functions(C#)中处理用户输入错误及重新输入的方案咨询

我之前刚好处理过类似的Durable Functions场景,给你几个实用的思路来解决用户输入错误、重新提交的问题:


1. 用循环包裹「等待输入-处理」逻辑,实现重试流程

核心思路是把等待外部输入和处理输入的逻辑放到一个循环里,当处理步骤返回错误时,把错误反馈给客户端,然后再次等待用户提交新的输入。

你可以在Orchestrator里这么写:

// 定义最大重试次数,避免无限循环
const int MaxRetryAttempts = 3;
int retryCount = 0;
ActionOneResult userInput = null;
ActionOneProcessResult processResult = null;

do
{
    // 第一次等待用户输入,或者错误后等待重新输入
    if (retryCount == 0)
    {
        userInput = await context.WaitForExternalEvent<ActionOneResult>("actionOne");
    }
    else
    {
        // 通知客户端错误信息,然后等待新输入
        await context.CallActivityAsync("notifyClientOfErrors", processResult.ErrorMessages);
        userInput = await context.WaitForExternalEvent<ActionOneResult>("actionOneRetry");
    }

    // 处理用户输入
    processResult = await context.CallActivityAsync<ActionOneProcessResult>("processActionOne", new ActionOneData
    {
        data = userInput,
        info = someFunctionData
    });

    retryCount++;
} while (!processResult.IsSuccess && retryCount < MaxRetryAttempts);

// 处理最终结果:要么成功,要么达到最大重试次数
if (processResult.IsSuccess)
{
    // 执行后续正常流程
}
else
{
    // 达到重试上限,通知客户端流程终止
    await context.CallActivityAsync("notifyClientOfFailure", "达到最大重试次数,流程终止");
}

2. 设计带错误状态的返回模型

别让processActionOne直接抛出异常,而是返回一个包含状态、错误信息的强类型结果,这样Orchestrator能清晰判断处理状态。比如定义这样的模型:

public class ActionOneProcessResult
{
    public bool IsSuccess { get; set; }
    public List<string> ErrorMessages { get; set; } = new List<string>();
    public ActionOneProcessData ResultData { get; set; }
}

在processActionOne里,验证不通过时就把具体错误(比如"手机号格式错误"、"密码强度不足")放到ErrorMessages里,把IsSuccess设为false。

3. 客户端配合实现错误接收与重新提交

客户端需要做两件事:

  • 监听Orchestrator的错误通知:可以通过Durable Functions的GetStatusAsync接口轮询实例状态,或者在你的通知Activity里直接调用客户端的Webhook把错误推过去;
  • 重新提交输入:用户修正错误后,调用Durable Functions的RaiseEventAsync接口,把新的输入发送到对应的事件(比如上面代码里的actionOneRetry)。

4. 可选:增加重试次数限制,避免无限循环

一定要给循环加最大重试次数的限制,比如上面代码里的MaxRetryAttempts,防止因为用户一直提交错误输入导致Orchestrator无限运行,浪费资源。另外也可以根据错误类型区分处理:比如如果是系统级错误(不是用户输入错),直接终止流程,不用让用户重试。


备注:内容来源于stack exchange,提问作者EnenDaveyBoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:14:30