【问题标题】:ConfigureAwait(false) in F#F# 中的 ConfigureAwait(false)
【发布时间】:2016-06-30 17:13:42
【问题描述】:

我正在使用一个用 C# 编写并使用 async/await 模式的库。在 C# 中,我可以通过使用 ConfigureAwait(false) 调用它来等待某些东西,但是当我使用 F# 中的库时,我看不到做同样事情的方法吗?

目前我使用SomeMethodAsync() |> Async.AwaitTask 将其转换为Async F# 工作流,但是在调用SomeMethodAsync 时,我如何才能从F# 中执行与ConfigureAwait(false) 相同的操作?


编辑:

借助 F# Slack 频道的一些出色帮助和一些额外的谷歌搜索,我在这里找到了关于如何切换上下文的一个很好的解释:http://tomasp.net/blog/async-non-blocking-gui.aspx/

【问题讨论】:

标签: c# asynchronous f# async-await async-workflow


【解决方案1】:

就像在将其转换为 F# 任务之前调用 ConfigureAwait 一样简单。

SomeMethodAsync().ConfigureAwait(false) |>  Async.AwaitTask

但是,如果您主要处理 C# 异步任务。 TaskBuilder.fs 计算表达式对我们来说更简洁。使用 dotnet add package TaskBuilder.fs 在 nuget 中可用。

您不必手动调用ConfigureAwait(false) 而只需

open FSharp.Control.Tasks.V2.ContextInsensitive

然后每次你let!它会自动成为.ConfigureAwait(false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2017-06-22
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多