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

C#中如何为异步函数的委托参数添加参数并传递错误消息?

问题:如何给异步委托传递错误消息?

我有如下异步方法,运行完全正常:

protected async Task ProcessExecuteResponseAsync(string errorMessage, 
            Func<Task> failureAction = null)
{
    if (isOk == false)
    {
        if (failureAction != null)
        {
            var failureResult = failureAction.Invoke();
            await failureResult;
        }
    }
}

现在我想把errorMessage传递给failureAction委托,尝试了下面的写法,却报错无法将string转换为Task:

protected async Task ProcessExecuteResponseAsync(string errorMessage, 
            Func<Task, string> failureAction = null)
{
    if (isOk == false)
    {
        if (failureAction != null)
        {
            var failureResult = failureAction.Invoke(errorMessage);
            await failureResult;
        }
    }
}

请问正确的语法应该是什么?


解答

你搞反了Func泛型参数的顺序:Func<T1, TResult>的规则是最后一个类型是返回值,前面的都是输入参数。你写的Func<Task, string>表示委托需要接收一个Task参数、返回string,但调用时传的是string类型的errorMessage,自然会类型不匹配报错。

正确的委托类型应该是Func<string, Task>——接收一个string参数,返回Task。修正后的方法代码如下:

protected async Task ProcessExecuteResponseAsync(string errorMessage, 
            Func<string, Task> failureAction = null)
{
    if (!isOk)
    {
        // 空值安全调用,避免空引用异常
        await failureAction?.Invoke(errorMessage);
    }
}

调用该方法时,你可以这样传入带错误消息参数的委托:

await ProcessExecuteResponseAsync("操作执行失败", async (errMsg) => 
{
    // 示例:用传入的错误消息做日志记录
    await LogHelper.WriteErrorLogAsync(errMsg);
});

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:31:35