我有一个运行的线程,它持续监听消息流(类型为Message
及其子类型)并将它们排序到相应的bin中(例如Response
类型的消息进入一个bin,{ {1}}类型消息进入另一个等等,所以其他线程可以检查和/或检索他们感兴趣的bin中的消息。问题是我不知道如何中断它。由于某种原因,Info
线程不会导致Interrupt()
在其运行循环中抛出。即使ThreadInterruptedException
流也不会阻止它等待,这很奇怪。
线程的运行循环类似于以下内容:
Dispose()
其中protected virtual void Run() {
try {
while (true) {
Message m = Receive();
MessageBins[GetMessageType(m)].TryAdd(m);
}
} catch (ThreadInterruptedException) {
Console.Error.WriteLine("Interrupted!"); // DEBUG, never reaches here, even when interrupted
} catch (SerializationException e) {
// ...
} catch (Exception e) {
// ...
}
}
看起来像
Receive()
如何打断这个?