我正在使用一个用c#编写的库,并使用async/await模式。在c#中,我可以通过调用ConfigureAwait(false)
来等待一些东西,但是当我使用f#中的库时,我看不到做同样事情的方法?
目前我做SomeMethodAsync() |> Async.AwaitTask
转换成Async
f#工作流,但我怎么能做同样的ConfigureAwait(false)
从f#调用SomeMethodAsync
时?
编辑:
在f# Slack频道和一些额外的谷歌搜索中,我找到了一个关于如何切换上下文的很好的解释:http://tomasp.net/blog/async-non-blocking-gui.aspx/
只需在将其转换为f# Task之前调用ConfigureAwait即可。
SomeMethodAsync().ConfigureAwait(false) |> Async.AwaitTask
然而,如果你主要处理c#异步任务。TaskBuilder对我们来说更简洁。f的计算表达式。在nuget中使用dotnet add package TaskBuilder.fs
。
您不必手动调用ConfigureAwait(false)
,而只需
open FSharp.Control.Tasks.V2.ContextInsensitive
然后每次输入let!
它就会自动变为.ConfigureAwait(false)