gpt4 book ai didi

.net 线程监控

转载 作者:行者123 更新时间:2023-12-04 00:25:17 27 4
gpt4 key购买 nike

我想从另一个线程监视一个线程。当前正在查看 threasd.isalive 属性。如果线程中有任何异常,则 thread.isalive 属性仍为 true。

如果线程中有任何异常或者线程处于无限循环中,我想杀死线程..

会为您的输入/解决方案/建议提供支持。

拉朱

最佳答案

听起来受监视的线程正在捕获它抛出的异常,否则,它会终止并可能也会使您的整个进程停止运行。您可以订阅 AppDomain.FirstChanceException 事件来确定最初何时抛出异常,但即使发生这种情况,您也不一定要终止线程(如果线程捕获异常、处理它并正常进行会怎样?)。相反,考虑让异常“正常”终止线程,然后在监视器代码中捕获它以防止它关闭进程。

无法判断线程是否处于无限循环中,但您可以终止运行时间过长的线程(请参阅下面的示例代码)。用 Thread.Abort 强行终止线程但是,可能会导致问题并且是代码异味(请参阅 here )。您应该考虑更改工作线程来管理它自己的生命周期。

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);
}
}

关于.net 线程监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3546564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com