我有一个使用以下命令创建任务的主线程:
new TaskFactory(cancellationToken).StartNew(() => DoSomething(cancellationToken),
TaskCreationOptions.LongRunning);
我想知道当创建任务的主线程在c#中被杀死时,任务是否仍然存在。
答案 0 :(得分:3)
如果进程的主线程终止,则进程中止。当进程被终止时,所有线程(以及其他拥有的资源)也会被关闭/终止/终止。
因此,如果您的进程'主线程创建了一个工作线程并且主线程被终止,那么工作线程也会被终止。
不要被TaskCreationOptions.LongRunning
枚举混淆 - 这只是底层线程池管理器的一个指示,它可能希望在最大线程池大小的正常约束之外创建此线程。
答案 1 :(得分:0)
如果AppDomain(通常等于进程)幸免于“杀死”创建任务的线程,那么任务将继续存在。
当任务尝试完成时会发生什么取决于同步上下文 - 如果它必须在中止线程上继续它将抛出/挂起,如果它可以在线程池线程上继续而不是任务将能够完成。
请注意,通常基于UI的应用程序中止主线程意味着至少停止事件循环,这将导致进程被视为“无响应”并可能被杀死。