如何在async表达式中实现提前返回,无需使用第三方asyncResult库
实现代码
let getCustomerNameAndAmount customerId dataId = async { // 先执行loadCustomer获取结果 let! customerResult = loadCustomer customerId match customerResult with // 客户加载失败直接返回错误,不会触发loadData执行 | Error err -> return Error err // 客户加载成功才执行loadData | Ok customer -> let! data = loadData dataId return Ok (getNameOfCustomer customer, data.Amount) }
逻辑说明
- 全程仅使用F#原生的
async计算表达式和Result类型的模式匹配能力,既没有引入第三方asyncResult表达式,也不需要自行实现自定义计算表达式 - 只有
loadCustomer返回Ok结果时才会执行loadData的异步调用,完全符合需求 - 错误路径直接透传
loadCustomer返回的错误信息,和原逻辑的错误返回结果保持一致
内容的提问来源于stack exchange,提问作者Async10
相关产品推荐
相关产品推荐

