编程语言
首页 > 编程语言> > c# – 为什么Parallel.ForEach改变了它的线程文化?

c# – 为什么Parallel.ForEach改变了它的线程文化?

作者:互联网

今天我遇到了一个我无法解释的奇怪现象.在gridview中有一个包含多个行的网页,需要将其逐个保存到数据库和XML文件中.我最终使用了Parallel.ForEach,因为行之间没有关系,所以它们可以独立执行.代码基本上是这样的:

        Parallel.ForEach(gvWithData.Rows.Cast<GridViewRow>(), row =>
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                    // do some logic and stuff...
                    var type = new Object { ... };

                    // save to the database
                    type.Save();

                    // retrieve the saved item from the database again
                    //  since we need some autoincrement values from the db
                    var typeAfterSave = TypeManager.GetFromDb();

                    // create a custom XML from the object
                    XmlManager.CreateXml(typeAfterSave);
                }
            }

当我用一个好的旧foreach替换Parallel.ForEach并且我没有改变别的东西时,为什么这个代码会有任何不同呢?

不同之处在于,在第一种情况下创建XML的文化与第二种情况不同,我没有丝毫的线索.

有什么建议?

解决方法:

这是因为你为CurrentThread设置了文化. Parallel.ForEach将为每次迭代创建一个新任务,它们将具有默认文化.

在.NET 4.5中,您可以使用CultureInfo.DefaultThreadCurrentCulture属性来更改AppDomain的文化(为所有线程设置区域性).

(CultureInfo.DefaultThreadCurrentCulture on msdn)

标签:c,asp-net,cultureinfo,parallel-foreach-2
来源: https://codeday.me/bug/20190608/1198441.html