【发布时间】:2011-05-13 14:20:03
【问题描述】:
我正在使用带有 C# 的 .NET 4.0 任务并行库(我第一次使用 TPL)
我有一个任务 A,我想在启动一堆其他任务(B、C、D 等)之前完成它。因此,我想创建任务 B、C、D 等作为任务 A 的延续。 但是,我想将“状态”对象传递给任务 B,将另一个状态对象传递给任务 C,等等。
我可以通过简单地使用接受状态对象的 Task 构造函数重载将状态对象传递给任务 A,例如 http://msdn.microsoft.com/en-us/library/dd783035.aspx 描述了此 Task 构造函数重载:
Task(Action<Object>, Object, CancellationToken)
这很好用,第二个参数是我的“状态”对象。
我想创建一个延续任务,例如对于任务 B:
Task taskB = taskA.ContinueWith(/* args here*/)
但是,我看不到 ContinueWith() 重载(请参阅http://msdn.microsoft.com/en-us/library/dd235663.aspx),它允许我将“状态”对象传递给延续任务。如何做到这一点?
注意事项:
- 在我创建 taskA 时,我没有 taskB 的“状态”对象
- taskB 的“状态”对象不是 taskA 的输出(返回值)
对于某些上下文,我正在做的是在几个循环中创建 taskB、taskC 等,因此我使用状态对象将循环变量的值传递给 taskB、taskC 等,以便避免总是以任务中循环变量的最终值结束的问题(闭包问题)。
【问题讨论】:
标签: c# .net task-parallel-library