.net 如何向任务传递或冻结时间点值?

.net 如何向任务传递或冻结时间点值?,.net,task,.net,Task,如何向任务传递或冻结时间点值 下面代码的问题是传递给DocFTSinXsCollection(SID)的SID不是在执行Task.Factory.StartNew时传递的,而是来自下一个rdr.Read()的SID 您需要将SID声明为while循环中的局部变量,以便每个闭包将获得自己的变量: while (rdr.Read()) { int SID = rdr.GetInt32(0); // other code Task.Factory.StartNew(()

如何向任务传递或冻结时间点值

下面代码的问题是传递给DocFTSinXsCollection(SID)的SID不是在执行Task.Factory.StartNew时传递的,而是来自下一个rdr.Read()的SID


您需要将
SID
声明为
while
循环中的局部变量,以便每个闭包将获得自己的变量:

while (rdr.Read())
{
     int SID = rdr.GetInt32(0);
     // other code
     Task.Factory.StartNew(() =>
     {
         // this often gets the new  SID - I need the SID from when Task was started
         DocFTSinXsCollection docFTSinXsCollection = new DocFTSinXsCollection(SID);
     }
     // other code
}

您需要将
SID
声明为
while
循环中的局部变量,以便每个闭包将获得自己的变量:

while (rdr.Read())
{
     int SID = rdr.GetInt32(0);
     // other code
     Task.Factory.StartNew(() =>
     {
         // this often gets the new  SID - I need the SID from when Task was started
         DocFTSinXsCollection docFTSinXsCollection = new DocFTSinXsCollection(SID);
     }
     // other code
}

在发布的代码中,只有一个变量称为SID。因此,每个闭包中都绑定了相同的变量。在发布的代码中,只有一个名为SID的变量。所以每个闭包中都绑定了相同的变量..现在和目前为止测试都很好。在接受之前还需要测试一些。你以前帮过我的,谢谢!测试现在和目前为止都很好。在接受之前还需要测试一些。你以前帮过我的,谢谢!