如何在不使用TaskCreationOptions.AttachedToParent的情况下等待所有任务(创建的任务和子任务)

J4N*_*J4N 5 .net c# parallel-processing task-parallel-library thread-synchronization

我将不得不创建一个创建多个Task的并发软件,每个Task都可以生成另一个任务(也可以生成另一个Task,...).

我需要调用启动任务的方法阻塞:在完成所有任务和子任务之前不返回.

我知道有这个TaskCreationOptions.AttachedToParent属性,但我认为它不适合:

服务器至少会有8个内核,每个任务都会创建2-3 AttachedToParent个子任务,所以如果我设置了选项,我的印象是第二个子任务不会在第一个子任务的三个任务之前启动结束.所以我在这里将进行有限的多任务处理.

所以使用这个进程树:

在此输入图像描述

我的印象是,如果我每次启动一个线程时都设置了AttachedToParent属性,那么在E,F,G完成之前B不会结束,所以C将在B完成之前启动,而我将只有3个活动线程而不是8个我可以有.

如果我没有放置AttachedToParent属性,A将很快完成并返回.

那么如果我没有设置这个选项,我怎么能确保我总是使用我的8个内核呢?

Me.*_*ame 2

TaskCreationOptions.AttachedToParent不会阻止其他子任务启动,而是阻止父任务本身关闭。因此,当 E、F 和 G 使用 AttachedToParent 启动时,B 不会被标记为已完成,直到所有三个都完成为止。所以它应该按照你想要的那样做。

来源(在接受答案中)。