c# - F# 中的 ConfigureAwait(false)

标签 c# asynchronous f# async-await async-workflow

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

相关文章:

c# - 自定义类的 Blazor 验证

f# - 为通用应用程序(又名商店应用程序或 Windows 应用程序或 WinRT 应用程序)创建 F# PCL

javascript - 我们如何使用 Async,在 nodeJS 中最好的方法是什么

f# - 如何对 Deedle 中的非唯一列/索引进行左连接

f# - 在 F# 中记录受歧视的联合

带参数的c#设置项目

c# - 忽略特定操作的 Controller 路由属性

c# - 在 C# 中,顺序循环如何比并行循环运行得更快?

具有进度状态的 Java/Spring 线程

node.js - DDD 和 Node.js : Good practice to have a repository with async callbacks?