默认情况下
Task.Run
从开始
TaskCreationOptions.DenyChildAttached
.
从
MSDN
:
任务创建选项.denychildatatached
指定任何试图作为附加任务执行的子任务
子任务(即使用AttachedToParent选项创建)
无法附加到父任务,将改为执行
作为独立的子任务。有关更多信息,请参阅附件和
分离的子任务。
你应该使用
Task.Factory.StartNew
,以便您可以指定自己的参数。
public static async Task Do()
{
Task<int[]> parent = Task.Factory.StartNew
(
() =>
{
var results = new int[3];
Task.Factory.StartNew(() => results[0] = 0, default(CancellationToken), TaskCreationOptions.AttachedToParent, TaskScheduler.Default);
Task.Factory.StartNew(() => results[1] = 1, default(CancellationToken), TaskCreationOptions.AttachedToParent, TaskScheduler.Default);
Task.Factory.StartNew(() => results[2] = 2, default(CancellationToken), TaskCreationOptions.AttachedToParent, TaskScheduler.Default);
return results;
}
, default(CancellationToken), TaskCreationOptions.None, TaskScheduler.Default);
var ints = await parent;
foreach (var i in ints)
{
Console.WriteLine("res {0}", i);
}
}
为了避免潜在的混淆
TaskScheduler
如果使用,则应使用带有taskscheduler参数的重载。