Hug*_*son 19 .net c# task-parallel-library
我正在使用带有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)
Run Code Online (Sandbox Code Playgroud)
这工作正常,第二个参数是我的"状态"对象.
我想创建一个延续任务,例如任务B:
Task taskB = taskA.ContinueWith(/* args here*/)
Run Code Online (Sandbox Code Playgroud)
但是,我看不到ContinueWith()重载(请参阅http://msdn.microsoft.com/en-us/library/dd235663.aspx),它允许我将"状态"对象传递给延续任务.如何才能做到这一点?
笔记:
对于某些上下文,我正在做的是在几个循环中创建taskB,taskC等,所以我使用状态对象将循环变量的值传递给taskB,taskC等,以避免问题总是以任务中的循环变量的最终值结束(闭包问题).
Jon*_*eet 23
最简单的方法可能是简单地捕捉它在Func<Task, TResult>
你进入ContinueWith
.例如:
object taskBState = GetStateHere();
Task taskB = taskA.ContinueWith(task => RealContinuation(task, taskBState));
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我发现捕获状态更容易,无论如何都要通过状态传递.
归档时间: |
|
查看次数: |
8441 次 |
最近记录: |