0

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

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

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

在大量阅读该论点之后,我发现无法在本地设置读/写操作的超时。可以使用一些技巧来实现超时过程(例如:.WaitAny 或可超时令牌),但我所有的阅读都让我意识到了这个事实:

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

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

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

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

谢谢。

4

1 回答 1

1

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

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

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

我不同意。协议定义中的超时只是建议性的;它们不能被强制执行。或者换一种说法,它不必是文字的接收或发送超时;它可以是逻辑“接收”或“发送”超时。

于 2017-09-15T17:51:04.327 回答