我目前正在编写一个运行多个线程的程序,它们都试图将请求发送到Web服务器。我需要一种方法可以终止所有线程,我已经尝试使用Thread.Abort
和一个标志,但两者似乎都需要永远终止我正在运行的所有线程和Thread.Abort
可能没有事件工作。首先,我将所有线程对象收集到List<Thread>
:
Thread thread = new Thread(...);
thread.IsBackground = true; //Terminate thread when application is shutdown
checkerThread.Start();
threadList.Add(thread); //List to hold all thread objects.
所以我尝试的第一种方法是尝试通过Thread.Abort
注入异常来强制线程中止。
foreach(Thread thr in threadList)
thr.Abort();
如上所述,这似乎永远悬而未决。然而,使用标志确实有效,唯一的缺点是它需要永远。
stopped = true; //Boolean flag, threads are on a while loop that check it.
while (threadsAreRunning()) //Function that checks if there any live threads in the list, does not continue until all threads are dead.
{
Thread.Sleep(50);
}
这个标志不起作用的原因似乎是来自getRequestStream()
的{{1}}函数在我的线程中运行了很长一段时间,我设置了每个可能的超时但是这个bug似乎是坚持,让我相信问题在于HttpWebRequest
函数iteself。
现在我的问题是为什么getRequestStream()
在尝试终止这些线程时不起作用?还有其他方法可以终止一个帖子吗?
请原谅任何语法或拼写错误,英语不是我的第一语言。
感谢所有回复此主题的人。