我试图找出如何正确执行此操作。 “Task MyTask = new Task(()=> Match.UserObject.InitUser(tmpUserObject));”,tmpUserObject在任务运行时得到评估,而不是在声明时评估。由于这似乎是一个“特征”,因此在声明任务时必须有正确的方法来使用tmpUserObject的值。参数在任务运行时读取,而不是在声明时读取
感谢:-)
Match.UserObject tmpUserObject;
while (myReader.Read())
{
if (tmpDict.TryGetValue(UserID, out tmpUserObject))
{
tmpUserObject.vchSchoolID.Add(myReader.GetString(5));
}
else
{
tmpUserObject = new Match.UserObject();
//Assign some values from reader...
//Do any processing eg. DoubleMetaphone pre-computation...etc...
Task MyTask = new Task(() => Match.UserObject.InitUser(tmpUserObject));
TaskList.Add(MyTask);
}
}
//Block until all the tasks are done
Task[] MyTaskArray = TaskList.ToArray();
Task.WaitAll(MyTaskArray);
tmpUserObject的“值”是参考“值”,也就是内存位置。每次我将tmpUserObject分配给一个新对象时,参考值都会改变。我需要在创建任务时“捕捉”此引用的值。 – Bengie 2012-01-31 22:06:06
看到我需要做出改变的编辑。 – 2012-01-31 22:10:08