0

我有一个并行 For 循环,在该循环中我有一个数据集,其中包含特定于从并行循环返回的值的数据,如下所示:

    Parallel.For(0, uSet.Tables[0].Rows.Count, new ParallelOptions { MaxDegreeOfParallelism = val.MaxSubIterations() }, br =>
        {
            List<DataSet> MstWiseData = bll.GetUIDTable(uSet.Tables[0].Rows[0]["UID"].ToString());
            //Long Process Starts
        });//Uid Parallel

我的问题是,MstWiseData变量是否在每个循环中都被清除,或者在循环完成之前是否保留其中的数据,对于另一个并行循环,创建相同变量的另一个实例,即线程 x 上的循环在线程 y 上的变量和循环有 4 个数据集。循环 x 的变量是否被循环 y 替换?

因为我需要使用该变量并在长流程完成后处理它。

4

3 回答 3

2

您的方案使用线程局部变量,这些变量在由并行 For 循环创建的每个单独任务中检索。

有关更多详细信息,请查看http://msdn.microsoft.com/en-us/library/dd460703.aspx

于 2013-06-11T09:54:43.837 回答
1

lambda 表达式是编写匿名方法的另一种方式。您MstWiseData的变量在该方法中算作局部变量,因此每个循环和线程都使用不同的。

于 2013-06-11T09:54:21.653 回答
0

前者。它在循环的每次迭代中被创建和释放。

于 2013-06-11T09:51:49.457 回答