首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Threads.Abort()

C# Threads.Abort()
EN

Stack Overflow用户
提问于 2010-05-24 20:14:44
回答 4查看 3.5K关注 0票数 7

如果一个线程正在运行一个函数func1,该函数在其中调用另一个函数func2 .

然后我调用了thread.Abort()

这只会停止func1吗?

或者func1func2以及func1调用的所有函数??

谢谢

编辑:下面是更详细的内容:

func1在一个新线程中被调用,它不断地定期调用func2 .

只有当某个数组不是null时,func2才开始执行一些工作。它完成了它并返回

当监控程序想要保存数据时,它会中止func1的线程,然后使数组为空,保存数据,然后用新的线程填充数组。并再次使用func1启动线程。

有时会引发异常,因为数组在func2中为空。因此,func1中止不影响func2。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-24 20:21:55

Thread.Abort不能保证停止线程,如果可能的话,您应该避免使用它。

调用此方法通常是终止线程。

强调我的。

它所做的是在目标线程中引发ThreadAbortException。如果捕捉到此异常,代码将继续执行,直到到达catch块的末尾,此时异常将自动重新抛出。如果您没有捕捉到它,它就类似于一个正常的异常--它在调用堆栈上传播。

假设您没有捕获异常,则该线程中运行的所有代码都将停止运行。从该线程启动的其他线程不会受到影响。

票数 15
EN

Stack Overflow用户

发布于 2010-05-24 20:15:50

在该线程中启动的任何内容都将被中止。

票数 3
EN

Stack Overflow用户

发布于 2010-05-24 21:36:15

您可能面临一个争用条件,在ThreadAbortException到达func1线程之前,但是在func2检查空数组之后,主例程会取消该数组。

至少,您的主代码和func2应该在数组周围使用一个锁。您还应该在重新启动func1线程之前测试它是否已死。就像其他人说的那样,发出停止线程的信号,而不是依赖Thread.Abort。

从您的描述中,我不能百分之百肯定func2是从func1线程中调用的,但是如果func2是在一个从func1内部启动的不同线程上运行的,那么杀死func1线程不会影响func2,因为所有线程都作为父进程的子进程存在,而不是从父进程中启动的线程。

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

https://stackoverflow.com/questions/2900003

复制
相关文章

相似问题

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