我熟悉任务和主题,我已经知道this。
这是我的代码:
static void Main(string[] args)
{
var t = Task.Factory.StartNew(() => {
Thread.Sleep(3000);
Console.WriteLine("Child");
}, CancellationToken.None, TaskCreationOptions.AttachedToParent, TaskScheduler.Default);
Task.WaitAll(t);
Console.WriteLine("Parent");
}
Console.WriteLine("Child");
是否会调用Task.WaitAll(t);
来调用regardelss。换句话说:是否有办法在没有waiting
的情况下执行所有已启动的子任务(并且一旦父项完成就不会被杀死)执行)?
答案 0 :(得分:2)
只要没有正在运行的前台线程,C#程序就会终止。 Task.Factory.StartNew
使用线程池线程来完成它的工作,而线程池线程都是后台线程,而不是前台线程,因此不会阻止整个程序终止。
如果你想确保整个程序没有终止,你需要确保至少有一个前台线程在运行,这意味着要么你在你创建的Task
中做了额外的工作吗?在前台线程中工作,而不是后台线程(如果你希望这项工作阻止应用程序终止,这是合适的),或者它将意味着在你的一个现有前台线程中等待其他线程完成。