Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 嵌套任务和单独任务之间的区别_.net_.net 4.0_Task Parallel Library - Fatal编程技术网

.net 嵌套任务和单独任务之间的区别

.net 嵌套任务和单独任务之间的区别,.net,.net-4.0,task-parallel-library,.net,.net 4.0,Task Parallel Library,我试图理解TPL中嵌套任务的概念。在什么情况下,最好创建嵌套任务,而不是创建两个单独的任务,因为在嵌套任务的情况下,它完全独立于父任务 使用父任务的本地队列是否会提高性能?这是有关此任务的msdn 首先,“嵌套任务”只是指在另一个任务中启动一个新任务,如下所示: var outerTask = Task.Factory.StartNew( () => { var nestedTask = Task.Factory.StartNew( () => {

我试图理解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 );
});
子任务将强制与父任务进行某些同步

由于子任务总是比独立嵌套任务具有更高的同步开销,因此您可能想知道为什么要使用它们

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

减少非确定性,可能会帮助您更快地编写和测试代码

虽然我不确定它是以这种方式实现的,但是子任务可以被注入到与父任务相同的线程/核心上,特别是当父任务只是在等待子任务时。在这种情况下,您可能能够从子任务中的父任务获得缓存的附加好处


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

对不起,你完全错了。我想知道创建嵌套任务的必要性,以及我们可以从中获得什么好处,而不是创建新任务…@RaoBHavik我的回答的后半部分描述了您使用它进行同步,并更容易地解释程序,但同步会导致相关的速度减慢。据我所知,没有其他区别。你能描述一下你所说的“嵌套任务”到底是什么意思吗。嵌套任务只是在另一个任务的用户委托中创建的System.Threading.Tasks.task实例。子任务是使用AttachedToParent选项创建的嵌套任务。我想了解嵌套任务的用途,以及它如何有用,或者何时应该使用它。。。。