F#中的ConfigureAwait(false)

dus*_*ris 7 c# f# asynchronous async-workflow async-await

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

目前,我确实SomeMethodAsync() |> Async.AwaitTask将其转换为AsyncF#工作流程,但是ConfigureAwait(false)调用时我该如何与F#一样SomeMethodAsync呢?


编辑:

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

jbt*_*ule 2

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

SomeMethodAsync().ConfigureAwait(false) |>  Async.AwaitTask
Run Code Online (Sandbox Code Playgroud)

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

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

open FSharp.Control.Tasks.V2.ContextInsensitive
Run Code Online (Sandbox Code Playgroud)

然后每次你let!都会自动.ConfigureAwait(false)