TcpClient.ConnectAsync是一个任务,它不适用于F#异步工作流程。
我认为我在这里缺少一些非常简单的东西 - 是否有一种通用方法可以使用工作流中的Async或Begin / End函数?
答案 0 :(得分:6)
查看Async.AwaitTask
和Async.FromBeginEnd
。
通常这会起作用:
async {
...
do! client.ConnectAsync(address, port) |> Async.AwaitTask
}
但是,因为Async
模块只能直接使用Task<'T>
和ConnectAsync
返回Task
,所以此特定情况下所需的代码会稍长一些:
do! client.ConnectAsync(address, port) |> Async.AwaitIAsyncResult |> Async.Ignore
或
let! _ = client.ConnectAsync(address, port) |> Async.AwaitIAsyncResult