我正在UWP平台上编写一个将从移动UWP应用程序中使用的类库。
库需要通过基于TCP的专有协议与外部设备通信。 该协议要求接收或发送操作等待一段确切的时间。
我实际上已经使用ReceiveAsync和SendAsync实现了通信层,"等待"正如TPL模式所暗示的那样。
经过对论证的大量阅读后,我发现没有办法在读/写操作上设置本机超时。 一些技巧可以用来实现超时过程(es:.WaitAny或者超时令牌)但是我的所有读数都让我知道这个事实:
只能关闭套接字才能中断ReceiveAsync或SendAsync任务
我的问题是:这是真的吗? 超时和接收/发送只能被阻止关闭/丢弃套接字?
如果这是真的,因为我实施的协议不允许我打开/关闭套接字数百次,我需要恢复到同步接收/发送版本< / strong>实际处理正常超时的命令。
我已经阅读了很多关于这些论点的内容,并且我非常确定我所写的内容,但老实说,我希望有一种方法可以使用TPL模式处理超时,而无需关闭套接字。 ..
感谢。
答案 0 :(得分:0)
我的问题是:这是真的吗?超时和接收/发送只能被阻止关闭/丢弃套接字?
是的,这是正确的。超时不适用于异步套接字方法。取消现有异步读/写的正确方法是关闭套接字。
如果这是真的,因为我实施的协议不允许我打开/关闭套接字数百次,我需要恢复到命令的同步接收/发送版本实际上处理优雅的超时。
我不同意。协议定义中的超时仅是建议性的;他们无法执行。换句话说,它不一定是文字接收或发送超时;它可以是逻辑&#34;接收&#34;或&#34;发送&#34;超时。