当我尝试从 F# 代码调用 C# 库中的异步方法时。
我收到以下编译错误。
该表达式原本应具有 Async 类型,但此处具有 Threading.Thread.Tasks.Task 类型
SendMessageAsync
位于 C# 库中并返回Threading.Thread.Tasks.Task<MyType>
let sendEmailAsync message =
async {
let! response = client.SendMessageAsync(message)
return response
}
用于之间转换Task<'T>
and Async<'T>
有一个内置的Async.AwaitTask
功能。
在普通格式之间进行转换Task
and 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)