我正在使用一个用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/
答案 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)