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

如何从已失败的LanguageExt.Common.Result中提取异常?

解决方案

1. 从失败的Result中提取异常

当Result<T>处于失败状态(IsFaulted = true)时,直接通过result.Exception属性即可获取捕获到的异常,修改后的DoNext方法如下:

public async Task<Result<MyClass>> DoNext()
{
    var result = await DoSomething();

    if (result.IsFaulted)
    {
        return new Result<MyClass>(result.Exception);
    }

    var data = new MyClass();
    return new Result<MyClass>(data);
}

2. 异步场景下的Match处理方案

你遇到的lambda无法异步执行的问题,是因为使用了同步版本的Match方法。LanguageExt针对异步场景提供了MatchAsync方法,支持异步lambda表达式,修改最初版本的代码如下:

public async Task<Result<MyClass>> DoNext()
{
    var result = await DoSomething();

    return await result.MatchAsync(
        async canDo => 
        {
            var myClass = await GetAsync(...);
            return new Result<MyClass>(myClass);
        },
        ex => Task.FromResult(new Result<MyClass>(ex))
    );
}

额外简化方案:使用BindAsync链式调用

你还可以用BindAsync方法替代手动判断状态,它会自动传递失败状态的异常,进一步简化代码:

public async Task<Result<MyClass>> DoNext()
{
    return await DoSomething()
        .BindAsync(async canDo => 
        {
            var myClass = await GetAsync(...);
            return new Result<MyClass>(myClass);
        });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:01:08