嵌套任务和子任务之间有什么区别

Tho*_*mas 4 c# task-parallel-library

我想了解有什么区别Nested Task and Child Task.

var outerTask = Task.Factory.StartNew( () => 
{
    var nestedTask = Task.Factory.StartNew( () => 
    {
         Console.WriteLine("Inside nestedTask");
    });
});


A "child task" looks like this:

var parentTask = Task.Factory.StartNew( () => 
{
    var childTask = Task.Factory.StartNew( () => 
    {
         Console.WriteLine("Inside childTask");
    },               TaskCreationOptions.AttachedToParent );
});
Run Code Online (Sandbox Code Playgroud)

在这里我附上了代码.

ut似乎当我们启动任何嵌套任务时,外部任务可以在内部任务之前完成,但是在子任务的情况下总是子任务在父任务之前完成.我不确定我是对还是不对.因此,如果有人指导我何时去嵌套任务和带有示例场景的子任务,那将会很有帮助.谢谢

nos*_*tio 7

IMO,最好的解释是在Stephen Toub的博客文章中找到的:

...正在创建的任务作为子进程向该父进程注册,导致另外两个行为:父任务也将不会转换到已完成状态,直到其所有子进程都已完成,并且来自故障的子进程的任何异常将传播到父任务(除非父任务在完成之前观察这些异常).

  • +1表示实际上在行为上有明显差异的答案(并链接到详细阐述并演示的博客文章)。比其他答案中含糊不清的“与父母紧密同步”这句话有用得多。 (2认同)

Gus*_*dor 5

微软对此进行了详尽的解释。

嵌套任务只是在另一个任务的用户委托中创建的Task实例。子任务是使用AttachedToParent选项创建的嵌套任务。一个任务可以创建任何数量的子任务和/或嵌套任务,仅受系统资源限制。以下示例显示了一个父任务,该父任务创建了一个简单的嵌套任务。

...

关于子任务与嵌套任务最重要的一点是,嵌套任务本质上独立于父任务或外部任务,而附加的子任务与父任务非常紧密地同步。

http://msdn.microsoft.com/zh-CN/library/vstudio/dd997417%28v=vs.100%29.aspx