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