任务生命周期Child vs parent

时间:2017-03-27 15:06:35

标签: c# task

我熟悉任务和主题,我已经知道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的情况下执行所有已启动的子任务(并且一旦父项完成就不会被杀死)执行)?

1 个答案:

答案 0 :(得分:2)

只要没有正在运行的前台线程,C#程序就会终止。 Task.Factory.StartNew使用线程池线程来完成它的工作,而线程池线程都是后台线程,而不是前台线程,因此不会阻止整个程序终止。

如果你想确保整个程序没有终止,你需要确保至少有一个前台线程在运行,这意味着要么你在你创建的Task中做了额外的工作吗?在前台线程中工作,而不是后台线程(如果你希望这项工作阻止应用程序终止,这是合适的),或者它将意味着在你的一个现有前台线程中等待其他线程完成。