我正在使用一个用 C# 编写并使用 async/await 模式的库。在 C# 中,我可以通过 ConfigureAwait(false)
调用它来等待某些东西。但是当我使用 F# 中的库时,我看不到做同样事情的方法吗?
目前我做SomeMethodAsync() |> Async.AwaitTask
将其转换为 Async
F# 工作流程,但我怎样才能做到与 ConfigureAwait(false)
相同的操作?调用 SomeMethodAsync
时也来自 F# ?
编辑:
在 F# Slack channel 和一些额外的谷歌搜索中得到了一些很棒的帮助,我在这里找到了关于如何切换上下文的一个很好的解释:http://tomasp.net/blog/async-non-blocking-gui.aspx/
最佳答案
就像在将其转换为 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)
关于c# - F# 中的 ConfigureAwait(false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129505/