Какова стандартная практика для запуска задачи с несколькими параметрами - PullRequest
9 голосов
/ 12 июля 2011

Прямо сейчас у меня есть

class MyParamClass
{
   all the parameters I need to pass to the task
}

MyParamClass myParamObj = new MyParamClass();
myParamObj.FirstParam = xyz;
myParamObj.SecondParam = abc;
mytask = new Task<bool>(myMethod, myParamObj,_cancelToken);
mytask.Start()

bool myMethod(object passedMyParamObj)
{
   MyParamClass myParamObj = passedMyParamObj as MyParamClass;
  //phew! finally access to passed parameters
}

Есть ли в любом случае, я могу сделать это без необходимости создавать класс MyParamClass? Как я могу передать несколько параметров в задачу без этого жонглирования? Это стандартная практика? спасибо

Ответы [ 2 ]

9 голосов
/ 12 июля 2011

Вы можете сделать это с лямбда или встроенным делегатом:

myTask = new Task<bool>(() => MyMethod(xyz, abc), _cancelToken);
6 голосов
/ 12 июля 2011

Использование класса-оболочки для обработки является стандартным способом сделать это.В противном случае вы можете использовать Tuple, чтобы не писать MyParamClass.

mytask = new Task(myMethod, Tuple.Create(xyz, abc), _cancelToken);
mytask.Start();

bool myMethod(object passedTuple)
{
     var myParamObj = passTuple as Tuple<int, string>;
}
...