Mea*_*een 4 c# asp.net cultureinfo 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);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这个代码在我Parallel.ForEach用一个好老的替换时会有任何不同之处,foreach而我什么都不做呢?
不同之处在于,在第一种情况下创建XML的文化与第二种情况不同,我没有丝毫的线索.
有什么建议?
这是因为你为CurrentThread设置了文化.Parallel.ForEach将为Task每次迭代创建一个新的,它们将具有默认文化.
在.NET 4.5中,您可以使用该CultureInfo.DefaultThreadCurrentCulture属性来更改文化AppDomain(为所有线程设置文化).
(msdn上的CultureInfo.DefaultThreadCurrentCulture)
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |