简而言之,是否可以在捕获 TimedOut 异常后重用套接字?我该怎么做?
很长的故事:
我有 2 个线程,都使用同一个套接字。一个正在向远程服务器发送数据包(我们称之为线程 A),而另一个(线程 B)正在侦听这些已发送数据包的确认数据包。当满足某些条件时,线程 A 将暂停(使用Monitor.Wait
),等待 aMonitor.Pulse
继续。当线程 B 收到一个数据包时,它调用Monitor.Pulse
并且线程 A 继续做它的事情......
问题是数据包可能会丢失,线程 B 将无限期地等待一个不会接收到的数据包,而线程 A 正在等待一个脉冲。整个程序将“阻塞”。我的第一个想法是设置接收超时并捕获相关的异常。发生这种情况时,我调用Monitor.Pulse
线程 A 可以继续,而线程 B 将继续等待另一个数据包。
但这不起作用。当异常被捕获时,套接字将关闭,当线程 A 尝试发送新数据包时应用程序将崩溃,因为它们使用的是同一个套接字。
如何防止这种行为?