Question
How can I pass a state object to a continuation task?
I'm using the .NET 4.0 Task Parallel Library with C# (my first time using TPL)
I have a task A which I want to run to completion before firing off a bunch of other tasks (B,C,D, etc). I therefore want to create tasks B,C,D etc as continuations of task A. However, I want to pass a 'state' object to task B, another state object to task C, etc.
I can pass a state object to task A by simply using a Task constructor overload that takes a state object, for example http://msdn.microsoft.com/en-us/library/dd783035.aspx describes this Task constructor overload:
Task(Action<Object>, Object, CancellationToken)
This works fine, and the second argument is my 'state' object.
I want to create a continuation task, e.g. for task B:
Task taskB = taskA.ContinueWith(/* args here*/)
However, I cannot see a ContinueWith() overload (see http://msdn.microsoft.com/en-us/library/dd235663.aspx) which allows me to pass a 'state' object to a continuation task. How can this be done?
Notes:
- I do not have the 'state' object for taskB available at the time I create taskA
- The 'state' object for taskB is not an output (return value) of taskA
For some context, what I am doing is creating taskB, taskC, etc. inside a couple of loops and so I am passing the value of the loop variables to taskB, taskC, etc. using a state object, in order to avoid the problem of always ending up with the final value of the loop variables in the tasks (the closure issue).