我试图理解 TPL 中嵌套任务的概念。在什么情况下创建嵌套任务而不是创建两个单独的任务更好,因为在嵌套任务的情况下,它完全独立于父任务。
使用父任务的本地队列是否有任何性能提升?
我试图理解 TPL 中嵌套任务的概念。在什么情况下创建嵌套任务而不是创建两个单独的任务更好,因为在嵌套任务的情况下,它完全独立于父任务。
使用父任务的本地队列是否有任何性能提升?
这是有关此的 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 在父任务完成之前计算一些东西。其他时候,它可能只会使调试更容易,因为您将不得不处理更少的不确定性。
减少不确定性,可以帮助您更快地编写和测试代码。
尽管我不确定它是否以这种方式实现,但有可能将子任务注入与父级相同的线程/核心上,尤其是当父级只是在等待子任务时。在这种情况下,您可能能够从子任务中的父任务中获得缓存的额外好处。
(这似乎是一个好主意,但我认为它还没有以这种方式实现,如果我错了,请纠正我)。