gpt4 book ai didi

c# - 为什么 Parallel.ForEach 会改变其线程的文化?

转载 作者:太空狗 更新时间:2023-10-30 00:49:04 27 4
gpt4 key购买 nike

今天我遇到了一个我无法真正解释的奇怪现象。有一个网页,在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);
}
}

当我将 Parallel.ForEach 替换为一个很好的旧 foreach 并且我什么都没改变时,为什么这段代码的工作方式会有所不同? ?

区别在于第一种情况下创建 XML 的文化与第二种情况不同,我一点也不知道为什么。

有什么建议吗?

最佳答案

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

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

( CultureInfo.DefaultThreadCurrentCulture on msdn )

关于c# - 为什么 Parallel.ForEach 会改变其线程的文化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com