TPL 内部任务

TPL inner tasks

我有以下代码:

List<Task> tasks = new List<Task>();

tasks.Add(Task.Factory.StartNew(() =>
{
    rs1.Process();
}).ContinueWith((previousTask) =>
{
    rs5.Process();
    rs6.Process();
}));

tasks.Add(Task.Factory.StartNew(() =>
{
    rs2.Process();
}));

tasks.Add(Task.Factory.StartNew(() =>
{
    rs3.Process();
}));

try
{
    Task.WaitAll(tasks.ToArray());
}
catch (AggregateException e)
{
}

当rs1.Process 完成() rs5.Process() 和rs6.Process() 运行 同步。我如何 运行 它们是异步的。

如果我使用内部任务,则不会等待它们

您需要一个内部任务列表:

tasks.Add(Task.Factory.StartNew(() =>
{
    rs1.Process();
}).ContinueWith((previousTask) =>
{
    List<Task> loInnerTasks = new List<Task>();
    loInnerTasks.Add(Task.Run(() => rs5.Process()));
    loInnerTasks.Add(Task.Run(() => rs6.Process()));
    Task.WaitAll(loInnerTasks.ToArray());
}));

更新(TaskCreationOptions.AttachedToParent):

tasks.Add(Task.Factory.StartNew(() =>
{
    rs1.Process();
}).ContinueWith((previousTask) =>
{
    Task.Factory.StartNew(() => rs5.Process(), TaskCreationOptions.AttachedToParent);
    Task.Factory.StartNew(() => rs6.Process(), TaskCreationOptions.AttachedToParent);
}));

异常也应该通过两种方式捕获。