f# - 如何忽略异步 block 中异步函数的返回值?

标签 f#

以下函数中的m1m2存在编译错误。

let m p = async { return p * 2 }
let m1 () = async { do! m 2 } // ERR: was expected 'int' but here has type 'unit'
let m2 () = async { do! m 2 |> ignore } // ERR: expecting 'Async<int>->Async<'a>' but given 'Async<int>->unit'

m 在最后一行被调​​用。如何忽略它的返回值?以下是唯一的方法吗(编译器会优化它的执行吗?)?

let m1 () = 
    async { 
      let! x = m 2 
      () 
    }

最佳答案

您可以使用 Async.Ignore为此:

let m1 () = async { do! m 2 |> Async.Ignore }

来自文档:

Async.Ignore Creates an asynchronous computation that runs the given computation and ignores its result.

关于f# - 如何忽略异步 block 中异步函数的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762436/

相关文章:

日期范围的 F# 生成器?

linux - 如何在 Linux 上测试 F#

list - 为什么 F# 列表范围比 for 循环慢这么多?

.net - 那么,既然 F# 已经开源,那么它又是怎么回事呢?

c# - 属性 'Context' 是 F# 中的静态错误

f# - F# 函数的通用版本导致无效的 IL?

f# - 如何将参数传递给 funscript 函数?

function - F# 如何从函数访问成员

f# - 记录 f# 代码的最佳方式是什么?

rest - 嵌套 Suave Web 部件