AttachedToParent有哪些用例?

Bet*_*eja 3 c# task-parallel-library

Task.Run和之间的区别之一TaskFactory.StartNewDenyChildAttach默认情况下添加新选项.但是AttachedToParent创造了一个原因.在什么情况下你想使用附加的子任务?

Ste*_*ary 6

用例AttachedToParent是当你有一个嵌套的动态任务并行场景时.那是:

  1. 您有一个并行执行的算法(即CPU代码,而不是I/O操作),以及
  2. 算法运行时,算法必须执行的任务会有所不同(也就是说,在算法启动时,它不知道需要多少任务),以及
  3. 在完成这些任务时存在分层或父/子关系(也就是说,在完成所有子项之前,不应认为"父"是完整的,如果任何子项失败/取消,则父项应该失败/取消,即使其代码没有错误).

由于绝大多数并发问题都是基于I/O的(不是基于CPU的),并且由于绝大多数并行方案是基于数据的并行性(不是动态任务并行性),并且因为动态任务并行问题可能会也可能不会具有层次性,这种情况几乎从未出现过.

不幸的是,任务(包括异步任务)之间存在逻辑父/子关系,这导致许多开发人员错误地尝试将AttachedToParent标志与async任务一起使用.因此,引入了DenyChildAttach标志(防止AttachedToParent生效).