F#异步工作流中的TcpClient.ConnectAsync或BeginConnect/EndConnect

Rei*_*aka 3 f# asynchronous

TcpClient.ConnectAsync是一个任务,它不适用于F#异步工作流.

我想我在这里遗漏了一些非常简单的东西 - 是否有一种通用方法可以使用工作流中的Async或Begin/End函数?

Dan*_*iel 6

看看Async.AwaitTaskAsync.FromBeginEnd.

通常这将工作:

async {
  ...
  do! client.ConnectAsync(address, port) |> Async.AwaitTask
}
Run Code Online (Sandbox Code Playgroud)

但是,因为Async模块只能直接使用Task<'T>ConnectAsync返回Task,所以此特定情况下所需的代码稍长:

do! client.ConnectAsync(address, port) |> Async.AwaitIAsyncResult |> Async.Ignore
Run Code Online (Sandbox Code Playgroud)

要么

let! _ = client.ConnectAsync(address, port) |> Async.AwaitIAsyncResult
Run Code Online (Sandbox Code Playgroud)