1

我试图理解 TPL 中嵌套任务的概念。在什么情况下创建嵌套任务而不是创建两个单独的任务更好,因为在嵌套任务的情况下,它完全独立于父任务。

使用父任务的本地队列是否有任何性能提升?

4

1 回答 1

0

这是有关此的 msdn文档

首先,“嵌套任务”只是意味着您在另一个任务中开始一个新任务,如下所示:

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

您可能的意思是“嵌套任务”和“子任务”之间的区别是什么

“子任务”如下所示:

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

子任务将强制与父任务进行某些同步。

因为子任务总是比独立的嵌套任务有更高的同步开销,这让你想知道为什么你可能想要使用它们。

有时您希望确保这些任务的同步。您希望 childTask 在父任务完成之前计算一些东西。其他时候,它可能只会使调试更容易,因为您将不得不处理更少的不确定性。

减少不确定性,可以帮助您更快地编写和测试代码。

尽管我不确定它是否以这种方式实现,但有可能将子任务注入与父级相同的线程/核心上,尤其是当父级只是在等待子任务时。在这种情况下,您可能能够从子任务中的父任务中获得缓存的额外好处。

(这似乎是一个好主意,但我认为它还没有以这种方式实现,如果我错了,请纠正我)。

于 2012-08-27T07:57:08.493 回答