7

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

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


编辑:

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

4

1 回答 1

2

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

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

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

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

open FSharp.Control.Tasks.V2.ContextInsensitive

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

于 2020-02-14T22:36:08.117 回答