在f#中配置await (false)

本文关键字:false await 配置 | 更新日期: 2023-09-27 17:53:59

我正在使用一个用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#中配置await (false)

只需在将其转换为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)