简体   繁体   English

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

[英]TcpClient.ConnectAsync or BeginConnect/EndConnect in F# async workflow

TcpClient.ConnectAsync is a Task, which doesn't work readily with F# async workflows. TcpClient.ConnectAsync是一个任务,它不适用于F#异步工作流。

I think I'm missing something really simple here -- is there a general way to use either the Async or Begin/End functions from workflows? 我想我在这里遗漏了一些非常简单的东西 - 是否有一种通用方法可以使用工作流中的Async或Begin / End函数?

Take a look at Async.AwaitTask and Async.FromBeginEnd . 看一下Async.AwaitTaskAsync.FromBeginEnd

Generally this will work: 通常这将工作:

async {
  ...
  do! client.ConnectAsync(address, port) |> Async.AwaitTask
}

However, because the Async module only works directly with Task<'T> and ConnectAsync returns Task , the code required in this particular case is slightly longer: 但是,因为Async模块只能直接使用Task<'T>并且ConnectAsync返回Task ,所以此特定情况下所需的代码稍长:

do! client.ConnectAsync(address, port) |> Async.AwaitIAsyncResult |> Async.Ignore

or 要么

let! _ = client.ConnectAsync(address, port) |> Async.AwaitIAsyncResult

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM