如何为TcpListener编写自己的异步包装器?

esa*_*sac 5 f# asynchronous

没有F#异步包装(在PowerPack中)为既不 TcpListener.BeginAcceptTcpClient()也没有EndAcceptTcpClient().

我如何编写自己的包装器,以便我可以使用let!async关键字并行运行它?

kvb*_*kvb 6

你检查过这个Async.BuildPrimitive功能吗?我想你可以这样做:

type TcpListener with
  member x.AsyncAcceptClient() = 
    Async.BuildPrimitive(x.BeginAcceptTcpClient, x.EndAcceptTcpClient)
Run Code Online (Sandbox Code Playgroud)

创建一个返回适当的异步结果的扩展方法.

  • 在最新版本的F#中,它被称为Async.FromBeginEnd. (3认同)