繁体   English   中英

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

[英]C# UWP Socket: using ReceiveAsync / SendAsync and handling a timeout without closing the socket

我正在UWP平台上编写类库,该类库将用于移动UWP应用程序。

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

实际上,我已经使用ReceiveAsync和SendAsync实现了通信层,并为它们“等待” TPL模式指示。

在对参数进行大量阅读之后,我发现无法自然地设置读/写操作的超时时间。 可以使用一些技巧来实现超时过程(例如:.WaitAny或超时令牌),但是我的所有阅读使我明白了这一事实:

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

我的问题是:这是真的吗? 只能关闭/处置套接字才能阻止超时的接收/发送吗?

如果是这样,则由于我正在实施的协议不允许我数百次打开/关闭套接字,因此我需要恢复到实际处理正常超时的命令的同步接收/发送版本

我已经阅读了很多有关参数的文章,并且对所写的内容很确定,但是老实说,我希望有一种方法可以使用TPL模式处理超时,而无需关闭套接字...

谢谢。

我的问题是:这是真的吗? 只能关闭/处置套接字才能阻止超时的接收/发送吗?

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

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

我不同意。 协议定义中的超时仅是建议性的; 它们无法执行。 或者换种说法,它不必是字面上的接收或发送超时; 它可以是逻辑上的 “接收”或“发送”超时。

暂无
暂无

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

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