我想在 C# 线程中试试运气,我知道一些关于 C 线程的事情。
所以我只想问我是否想终止一个线程,我应该这样做smt.Abort()
还是在函数结束后它会“自杀”?
另外, pthread_exit()
C#中是否有类似C的东西?
我想在 C# 线程中试试运气,我知道一些关于 C 线程的事情。
所以我只想问我是否想终止一个线程,我应该这样做smt.Abort()
还是在函数结束后它会“自杀”?
另外, pthread_exit()
C#中是否有类似C的东西?
Thread.Abort
将“杀死”线程,但这大致相当于:
场景:你想关掉你的电脑
解决方案:你把炸药绑在你的电脑上,点燃它,然后跑。
最好通过CancellationTokenSource.Cancel
设置一些(安全访问的)“正在运行”布尔等来触发“退出条件”,然后调用Thread.Join
. 这更像是:
场景:你想关掉你的电脑
解决方法:你点击开始,关机,等到电脑关机。
函数结束后,您无需手动终止线程。
如果你创建一个线程来运行一个方法,一旦方法返回,线程将自动关闭,因为它没有任何进一步的执行。*
当然,您可以通过简单地调用手动中止线程Abort()
,但由于无法可靠地确定线程在其当前执行状态中的位置,可能会导致线程状态损坏,因此几乎不建议这样做。如果您需要自己处理线程的终止,您最好考虑使用CancellationToken。您还可以阅读 MSDN 上的Cancellation of Managed Threads文章。
** 也就是说,除非您使用 ThreadPool 来执行您的工作。您不必担心中止这些线程,因为它们会在不同的队列任务中重复使用。
从外部(从线程外部)终止线程是一个坏主意;当你异步杀死它时,你永远不知道线程在做什么。在 C# 中,如果您的线程函数返回,则线程结束。
这篇 MSDN 文章How to: Create and Terminate Threads (C# Programming Guide)有一些注释和一些示例代码,您可能会发现它们很有帮助。
Thread.Abort()
Thread.Join();
Thread = null;