代码之家  ›  专栏  ›  技术社区  ›  ca9163d9

如何忽略异步块中异步函数的返回值?

f#
  •  3
  • ca9163d9  · 技术社区  · 7 年前

    这个 m1 m2 在以下函数中有编译错误。

    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 
          () 
        }
    
    1 回复  |  直到 7 年前
        1
  •  7
  •   Chad Gilbert    7 年前

    你可以使用 Async.Ignore 为此:

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

    从文档中:

    异步忽略 创建运行给定计算并忽略其结果的异步计算。