gpt4 book ai didi

f# - 错误 F# - c# async 调用 : converting Threading. Tasks.Task 到 Async<'a>

转载 作者:行者123 更新时间:2023-12-01 00:32:45 25 4
gpt4 key购买 nike

当我尝试从我的 F# 代码调用 C# 库中的异步方法时。
我收到以下编译错误。

This expression was expected to have type Async<'a> but here has type Threading.Thread.Tasks.Task


SendMessageAsync在 C# 库中并返回 Threading.Thread.Tasks.Task<MyType>
let sendEmailAsync message = 
async {
let! response = client.SendMessageAsync(message)
return response
}

最佳答案

用于在 Task<'T> 之间转换和 Async<'T>有一个内置Async.AwaitTask功能。

在普通 Task 之间转换和 Async<unit>您可以创建一个辅助函数:

type Async with
member this.AwaitPlainTask (task : Task) =
task.ContinueWith(fun t -> ())
|> Async.AwaitTask

然后你可以这样称呼它:
let sendEmailAsync message = 
async {
let! response = Async.AwaitPlainTask <|client.SendMessageAsync(message)
return response
}

当然,在这种情况下,响应不能是 () 以外的任何内容。 ,所以你不妨写一下:
let sendEmailAsync message = Async.AwaitPlainTask <|client.SendMessageAsync(message)

关于f# - 错误 F# - c# async 调用 : converting Threading. Tasks.Task<MyType> 到 Async<'a>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com