我可以在 Parallel Foreach 循环中使用局部变量吗(不会无意中重写以前的值)

Can I use local variables inside a Parallel Foreach loop (without unintentionally rewriting the previous value)

所以我试图一次处理一行数据表中的记录。我是多线程环境的新手,我被要求使用 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" 的逻辑(假设我们已经为它编写了一个 switch case)

但是,我们假设在线程 1 开始执行逻辑之前,线程 2 开始发挥作用。线程 2 将值 "Type2" 分配给 strType。

现在,当线程 1 转到我的 Switch 块时,它将保持什么值?会是 "Type1" 还是 "Type2"。

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

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

作为旁注,请注意一般的 ADO.NET class es,特别是 DataTable class 不是线程安全的。如果您尝试从多个线程并行改变它们​​,它们的内部状态可能会损坏,并且它们的行为将变得不确定。