【发布时间】:2018-10-20 20:39:44
【问题描述】:
我很难理解Async.[StartChild|Start] API 设计。
我想要的是启动一个异步进程,它会根据到达 tcp 的命令读取一些 tcp 流并调用回调。
由于这个异步进程并没有真正返回任何单个值,我似乎应该使用Async.Start。在某些时候,我想“关闭”我的 tcp 客户端,并且 `Async.Start 需要 CancellationToken,这使我能够实现“关闭”。到目前为止一切顺利。
问题是,我想知道 tcp 客户端何时完成取消。一旦请求取消,就会完成一些缓冲区刷新工作,所以我不想在 tcp 客户端完成清理之前终止应用程序。但是Async.Start 返回单位,这意味着我无法知道这样的异步过程何时完成。所以,看起来Async.StartChild 应该会有所帮助。我应该能够调用取消,当清理完成后,这个异步将调用链中的下一个继续(或抛出异常?)。但是...Async.StartChild 不带 CancellationToken,只有超时。
为什么Async.StartChild 只实现单例取消策略(超时)而不是公开更通用的方式(接受 CancellationToken)?
【问题讨论】:
标签: asynchronous f#