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