gpt4 book ai didi

c# - 多线程|威胁已经被清除了

转载 作者:行者123 更新时间:2023-12-03 13:18:41 25 4
gpt4 key购买 nike

我们正在3-4个不同的线程中执行一项长期工作(功能)。所有正在运行的线程都已成功完成,但有时其中一个线程抛出Thread was being aborted异常,导致所有线程停止。以下是我们在应用程序中实际执行的示例代码。

List<Thread> lstThreads = new List<Thread>();
foreach(int 0; i < 4; i++)
{
Thread th = new Thread(() => {
RunLongRunningJob(i);
});
lstThreads.Add(th);
}
foreach (Thread th in lstThreads)
th.Start();

我们正在调用rest api,在 RunLongRunningJob中写入文件并更新数据库记录。

P.S.我们没有使用LOCKS,这可能是原因吗?

最佳答案

在C#中,没有副作用就无法停止线程。想象一下,线程已经准备好了一次性物品,并且-停止了。解决方法是,当线程中止时(您应该-不应这样做,但是可以调用Thread对象),将生成并执行ThreadAbortException。这允许异常处理启动并关闭文件句柄等。

啊,终于找到了它-这是一篇博客文章,解释了为什么您永远不要调用Thread.Abort(即不应由应用程序代码调用):

http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation

这与计时有关,在非常糟糕的情况下,线程最终无法真正正确地执行。

现在,SOMETHING必须找出导致线程中止的原因。这是要检查的东西-异常详细信息会有所帮助,包括堆栈跟踪和其中可能的内部异常。

关于c# - 多线程|威胁已经被清除了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60450604/

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