首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程|线程正被中止

多线程|线程正被中止
EN

Stack Overflow用户
提问于 2020-02-28 19:14:13
回答 1查看 493关注 0票数 1

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

代码语言:javascript
复制
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中写入文件并更新数据库记录。

附注:我们没有使用锁,这可能是原因吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-28 19:20:42

在C#中,线程根本不能停止,而不会产生副作用。想象一下,线程已经准备好了一次性物品,然后就停止了。作为一种变通方法,当线程中止时(你不应该这样做,但你可以在thread对象上调用),就会生成并执行ThreadAbortException。这允许异常处理踢入和关闭文件句柄等。

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

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

这是关于时间和线程在真正糟糕的情况下最终没有正确执行的问题。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60450604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档