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

Does the task still survive when the main thread that creates it has been killed in c#?

我有一个创建任务的主线程:

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

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

如果 AppDomain(通常等于进程)在创建任务的线程中存活 "killing",则任务将继续存在。

任务尝试完成时会发生什么取决于同步上下文 - 如果它必须在中止的线程上继续,它将 throw/hang,如果它可以在线程池线程上继续,则任务将能够完成。

请注意,通常对于基于 UI 的应用程序,中止主线程意味着至少停止事件循环,这将导致进程被视为 "unresponsive" 并可能被终止。

如果进程的主线程终止,则进程中止。当一个进程被杀死时,所有线程(和其他拥有的资源)也是 closed/terminated/killed。

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

不要被 TaskCreationOptions.LongRunning 枚举所迷惑——这只是底层线程池管理器的一个指示器,表明它可能希望在最大线程池大小的正常限制之外创建此线程。