为什么平行会改变线程的文化



今天我遇到了一个奇怪的现象,我无法真正解释。网页中有一个网页,其中包含许多行,需要将其保存到数据库中,然后将其保存到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将为每种迭代创建一个新的Task,它们将具有默认文化。

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

(MSDN上的cultureinfo.defaultthreadcurrentcurtulture)

相关内容

  • 没有找到相关文章

最新更新