我试图理解TPL中嵌套任务的概念。在什么条件下最好创建嵌套任务而不是创建两个单独的任务,因为在嵌套任务的情况下,它完全独立于父。
使用父任务的本地队列是否有任何性能提升?
答案 0 :(得分:0)
这是msdn documentation。
首先,“嵌套任务”只是意味着您在另一个任务中启动新任务,如下所示:
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在父任务完成之前计算某些内容。其他时候,它可能只会使调试变得更容易,因为你将不得不处理更少的非确定性。
较少的非确定性,可以帮助您更快地编写和测试代码。
虽然我不确定它是以这种方式实现的,但是有可能将子任务注入到与父项相同的线程/核心上,特别是当父级只是在等待子任务时。在这种情况下,您可以从子任务中的父任务获得缓存的额外好处。
(这似乎是一个不错的主意,但我不认为它是以那种方式实现的,如果我错了就纠正我。)