今天我遇到了一个奇怪的现象,我无法真正解释。网页中有一个网页,其中包含许多行,需要将其保存到数据库中,然后将其保存到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);
}
}
当我用良好的旧 区别在于,在第一种情况下创建XML的培养与第二种情况不同,而我没有任何线索。 有什么建议?foreach
和替换Parallel.ForEach
时,为什么此代码在地球上有所不同
这是因为您已经为 CurrentThread 设置了文化。Parallel.ForEach
将为每种迭代创建一个新的Task
,它们将具有默认文化。
在.NET 4.5中,您可以使用CultureInfo.DefaultThreadCurrentCulture
属性来更改AppDomain
的文化(为所有线程设置文化)。
(MSDN上的cultureinfo.defaultthreadcurrentcurtulture)