【问题标题】:Await a System.Threading.Task and ignore the result?等待 System.Threading.Task 并忽略结果?
【发布时间】:2013-07-08 19:24:56
【问题描述】:

我试图通过直接潜入并尝试将一些 C# 代码转换为 F# 来学习 F#。我正在重写的一件事是异步方法的一部分,它等待对 HttpClient 的 GetAsync 的调用而不使用结果。那就是:

await httpClient.GetAsync("http://www.example.com");

下面是我尝试过的唯一没有红色波浪线的方法。虽然我认为它是有效的,但它确实创建了一个我可能想要避免的变量。

let! ignoreme = Async.AwaitTask <| httpClient.GetAsync("http://www.example.com")

这应该怎么做?

【问题讨论】:

    标签: f# async-await dotnet-httpclient


    【解决方案1】:

    do! 运算符与Async.Ignore 结合使用:

    do! Async.AwaitTask(httpClient.GetAsync("http://www.example.com")) |> Async.Ignore
    

    这与编写 let! ignoreme = ... 然后忽略 ignoreme 绑定相同。

    但是我认为最好还是坚持使用 F# 数据类型——尽可能避免使用 Async.AwaitTask 并直接使用 Async&lt;'T&gt; 类型。我认为FSharp.Data library 会很有帮助。

    【讨论】:

    • 我得到“这个表达式的类型应该是HttpResponseMessage,但这里的类型是unit
    • @unrelativity,是的,对此感到抱歉。我已经更正了答案。
    • 啊,这行得通!也感谢您链接到该库,似乎最好使用使用 F# 编写的库。
    猜你喜欢
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多