我希望能够从一个线程中监视另一个线程。目前正在查看线程的isalive属性。如果线程中有任何异常,仍然会返回true。
如果线程中有任何异常或者线程处于无限循环状态,我想要终止该线程。
非常感谢您提供的意见/解决方案/建议。
Raju
我希望能够从一个线程中监视另一个线程。目前正在查看线程的isalive属性。如果线程中有任何异常,仍然会返回true。
如果线程中有任何异常或者线程处于无限循环状态,我想要终止该线程。
非常感谢您提供的意见/解决方案/建议。
Raju
AppDomain.FirstChanceException
事件以了解何时初始引发异常,但即使发生这种情况,您也不一定想要终止线程(如果线程捕获异常,处理它并正常进行呢?)。 相反,考虑让异常“正常”地终止线程,然后在监视器代码中捕获它以防止其导致进程崩溃。
无法判断线程是否处于无限循环状态,但是可以杀死运行时间过长的线程(请参见下面的示例代码)。 然而,使用 Thread.Abort
强制终止线程可能会导致问题并且是不良设计的表现(请参见 此处)。 您应该考虑更改工作线程以管理其自身生存期。
class Program
{
static void Main(string[] args)
{
if (RunWithTimeout(LongRunningOperation, TimeSpan.FromMilliseconds(3000)))
{
Console.WriteLine("Worker thread finished.");
}
else
{
Console.WriteLine("Worker thread was aborted.");
}
}
static bool RunWithTimeout(ThreadStart threadStart, TimeSpan timeout)
{
Thread workerThread = new Thread(threadStart);
workerThread.Start();
bool finished = workerThread.Join(timeout);
if (!finished)
workerThread.Abort();
return finished;
}
static void LongRunningOperation()
{
Thread.Sleep(5000);
}
}
Thread.Abort
线程是完全不合适的。