当创建它的主线程在c#中被杀死时,任务是否仍然存在?

时间:2015-08-27 23:59:53

标签: c# task

我有一个使用以下命令创建任务的主线程:

new TaskFactory(cancellationToken).StartNew(() => DoSomething(cancellationToken), 
                                            TaskCreationOptions.LongRunning);

我想知道当创建任务的主线程在c#中被杀死时,任务是否仍然存在。

2 个答案:

答案 0 :(得分:3)

如果进程的主线程终止,则进程中止。当进程被终止时,所有线程(以及其他拥有的资源)也会被关闭/终止/终止。

因此,如果您的进程'主线程创建了一个工作线程并且主线程被终止,那么工作线程也会被终止。

不要被TaskCreationOptions.LongRunning枚举混淆 - 这只是底层线程池管理器的一个指示,它可能希望在最大线程池大小的正常约束之外创建此线程。

答案 1 :(得分:0)

如果AppDomain(通常等于进程)幸免于“杀死”创建任务的线程,那么任务将继续存在。

当任务尝试完成时会发生什么取决于同步上下文 - 如果它必须在中止线程上继续它将抛出/挂起,如果它可以在线程池线程上继续而不是任务将能够完成。

请注意,通常基于UI的应用程序中止主线程意味着至少停止事件循环,这将导致进程被视为“无响应”并可能被杀死。

相关问题