F#中的ConfigureAwait(false)

时间:2016-06-30 17:13:42

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

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

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

编辑:

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

1 个答案:

答案 0 :(得分: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)