Я использую параллельную библиотеку задач .NET 4.0 с С# (мой первый раз с использованием TPL)
У меня есть задача A, которую я хочу выполнить до завершения, прежде чем отпустить кучу других задач (B, C, D и т.д.). Поэтому я хочу создавать задачи B, C, D и т.д. В качестве продолжения задачи A. Тем не менее, я хочу передать объект "state" в задачу B, другой объект состояния для задачи C и т.д.
Я могу передать объект состояния в задачу A, просто используя перегрузку конструктора задачи, которая принимает объект состояния, например http://msdn.microsoft.com/en-us/library/dd783035.aspx описывает эту перегрузку конструктора задачи:
Task(Action<Object>, Object, CancellationToken)
Это отлично работает, а второй аргумент - мой объект state.
Я хочу создать задачу продолжения, например. для задачи B:
Task taskB = taskA.ContinueWith(/* args here*/)
Однако я не вижу перегрузки ContinueWith() (см. http://msdn.microsoft.com/en-us/library/dd235663.aspx), которая позволяет мне передать объект 'state' в задачу продолжения. Как это можно сделать?
Примечания:
- У меня нет объекта 'state' для taskB, доступного в момент создания taskA
- Объект 'state' для taskB не является результатом (возвращаемым значением) задачиA
В некотором контексте то, что я делаю, это создание taskB, taskC и т.д. внутри пары циклов, поэтому я передаю значение переменных цикла для taskB, taskC и т.д., используя объект состояния, чтобы избегайте проблемы всегда заканчиваться конечным значением переменных цикла в задачах (проблема закрытия).