如何在不使用过时的Thread.Suspend的情况下暂停一个阻塞线程?

5

我有一个线程在等待 TcpListener.AcceptTcpClient(),这个方法会阻塞,我想有时候暂停这个线程。

我读过关于 Monitor.Wait(...) 的文章,但我只有使用互斥锁的经验,如果线程在一个阻塞方法上等待,那就有点意思了。

现在 Thread.Suspend(...) 已经被弃用了,那么我应该如何暂停这个线程呢?


1
如果线程已经被阻塞,那么暂停它就没有意义。您能详细说明一下吗? - Brian Rasmussen
好的,我明白你的意思。我不希望线程在“挂起”时消耗任何传入的TCP连接,并且不使用任何资源。如果已经是这种情况,那么在AcceptTcpClient返回后设置一个suspended标志并在其上等待是否是正确的做法? - Petrus Theron
1个回答

2

这是不可能的,这是一个无法解决的竞态条件。监听器在您想要挂起它之前可能已经接受了连接。关闭监听器以使其不再接受任何连接是唯一确定的方法。

请重新考虑您的逻辑。您想要停止连接的操作可能需要锁定。


通过摆脱线程并使用异步的BeginAcceptTcpClient解决。 - Petrus Theron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接