C# 为什么CLR不';当AttachedToParent未正确使用时,是否不会引发异常?

C# 为什么CLR不';当AttachedToParent未正确使用时,是否不会引发异常?,c#,.net,C#,.net,创建子任务时,我们执行以下操作: Task parent = new Task(() => { var tf = new TaskFactory<Int32>(TaskCreationOptions.AttachedToParent, TaskContinuationOptions.None); var childTask1 = tf.StartNew(...); var childTask2 = tf.StartNew(...); ... }); parent

创建子任务时,我们执行以下操作:

Task parent = new Task(() => {
  var tf = new TaskFactory<Int32>(TaskCreationOptions.AttachedToParent, TaskContinuationOptions.None);
  var childTask1 = tf.StartNew(...);
  var childTask2 = tf.StartNew(...);
  ...
});
parent.Start(); 

我们可以看到,在这个控制台应用程序中没有父任务,但是我们仍然使用
AttachedToParent
标志创建了一个“子”任务,这没有什么意义,CLR应该抛出一个异常,说“在这里使用AttachedToParent是非法的”等等,但是程序运行没有任何问题。那么,如果我们错误地使用了
TaskCreationOptions.AttachedToParent
标志,CLR会不会忽略它并替换为默认的
TaskCreationOptions.None
标志?

我猜任务的行为方式将与在父任务上指定
denychildatach
时相同-“子任务将作为分离的子任务执行”-参见第三段。为了进一步证明@Martin的理论,我们可以使用
Thread.GetCurrentProcessorId()
,并看到当子任务不能在运行时正确附加时,它们不限于相同的执行上下文。
class Program {
   static void Main(string[] args) {
      var tf = new TaskFactory<Int32>(TaskCreationOptions.AttachedToParent, TaskContinuationOptions.None);
      var newTask = tf.StartNew(...);
   }      
}