我可以在Parallel Foreach循环内使用局部变量(无意间重写先前的值)

问题描述 投票:0回答:1

因此,我试图一次处理一个数据表中的记录。我是多线程环境的新手,被要求使用Parallel.Foreach循环。我想知道在并行执行模式下如何处理局部变量。以下是我的代码。

Parallel.ForEach(dtReportData.Tables[0].AsEnumerable(), drow =>
{
string strType = drow["type"];
//Based on this type, I am executing logic from a switch case.

});

现在。我想知道是否可以在循环内声明变量并将其赋值。例如,假设有2个线程并行运行。

线程1提取了一条记录,假设所获取的值为“ Type1”,并存储到strType中。现在,我希望我的代码执行类型“ Type1”的逻辑(假设我们已经为其编写了一个开关盒)

但是,假设线程1开始执行逻辑之前,线程2开始起作用。线程2将值“ Type2”分配给strType。

现在,当线程1进入我的Switch块时,它将保持什么值?是“ Type1”还是“ Type2”。

请注意,我不是在Foreach循环之外全局声明String变量的值,而是在循环内部,并且我相信每次都会创建一个新实例。

c# multithreading thread-safety task-parallel-library parallel.foreach
1个回答
0
投票

变量strType在此lambda调用中是本地的,其他任何线程都无法查看或修改它。它的值存储在当前线程的堆栈中。每个线程都有自己的堆栈,大小为1 MB

© www.soinside.com 2019 - 2024. All rights reserved.