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

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

编辑:

在F#Slack channel 中提供了一些出色的帮助,并进行了一些附加的谷歌搜索,我找到了关于如何在此处切换上下文的很好的解释:http://tomasp.net/blog/async-non-blocking-gui.aspx/

最佳答案

就像将它转换为F#Task之前调用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)

10-06 14:15
查看更多