C#UWP套接字:使用ReceiveAsync / SendAsync并在不关闭套接字的情况下处理超时

时间:2017-09-09 13:33:02

标签: c# sockets timeout sendasync

我正在UWP平台上编写一个将从移动UWP应用程序中使用的类库。

库需要通过基于TCP的专有协议与外部设备通信。 该协议要求接收或发送操作等待一段确切的时间。

我实际上已经使用ReceiveAsync和SendAsync实现了通信层,"等待"正如TPL模式所暗示的那样。

经过对论证的大量阅读后,我发现没有办法在读/写操作上设置本机超时。 一些技巧可以用来实现超时过程(es:.WaitAny或者超时令牌)但是我的所有读数都让我知道这个事实:

只能关闭套接字才能中断ReceiveAsync或SendAsync任务

我的问题是:这是真的吗? 超时和接收/发送只能被阻止关闭/丢弃套接字?

如果这是真的,因为我实施的协议不允许我打开/关闭套接字数百次,我需要恢复到同步接收/发送版本< / strong>实际处理正常超时的命令。

我已经阅读了很多关于这些论点的内容,并且我非常确定我所写的内容,但老实说,我希望有一种方法可以使用TPL模式处理超时,而无需关闭套接字。 ..

感谢。

1 个答案:

答案 0 :(得分:0)

  

我的问题是:这是真的吗?超时和接收/发送只能被阻止关闭/丢弃套接字?

是的,这是正确的。超时不适用于异步套接字方法。取消现有异步读/写的正确方法是关闭套接字。

  

如果这是真的,因为我实施的协议不允许我打开/关闭套接字数百次,我需要恢复到命令的同步接收/发送版本实际上处理优雅的超时。

我不同意。协议定义中的超时仅是建议性的;他们无法执行。换句话说,它不一定是文字接收或发送超时;它可以是逻辑&#34;接收&#34;或&#34;发送&#34;超时。