我正在实现一个协议库。这里是一个简化的描述。
main 函数中的主线程将始终检查网络流(在 tcpclient 中)是否有一些数据可用。让我们说响应是接收到的消息,线程是一个正在运行的线程。
thread = new Thread(new ThreadStart(function));
thread.IsBackground = true;
thread.Start();
while(true){
response = receiveMessage();
if (response != null)
{
thread.Suspend();
//I am searching for an alternative for the line above and not thread.Abort().
thread2 = new Thread(new ThreadStart(function2));
thread2.IsBackground = true;
thread2.Start();
}
}
到目前为止一切顺利,实际上在 while 循环中有更多消息要进入,并且还有一个状态机用于处理不同类型的传入消息,但这应该足够了。(还有不仅仅是函数“function”和“function2”)。
因此,无论如何,在这个应用程序中函数内部的外观并不清楚,因为协议对程序员是隐藏的,并且意味着是一个库。这意味着协议将根据程序在协议中的状态将一些程序员定义的函数作为线程启动。
因此,如果随后收到特殊响应(例如 callAnotherFunction 消息),我想突然终止一个线程(这里称为“线程”),假设在 100 毫秒内。但我不知道它是否在循环内执行,以及在它终止之前需要多少处理。
如何在不弃用 Suspend 或 Exceptionthrowing Abort 功能的情况下停止这些线程?(请注意,我不能强制函数的程序员捕获 ThreadAbortException。)
还是我需要不同的程序架构?(顺便说一句,我决定将循环放在 receiveMessage 中,用于将网络流轮询到主函数中,因为任何时候都会出现消息)。