今天我遇到了一个奇怪的现象,我无法真正解释。在gridview中有一个包含多行的网页,需要将它们逐个保存到数据库和XML文件中。我最终使用了Parallel.ForEach
,因为行之间没有关系,所以它们可以独立执行。该代码基本上是这样的:为什么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的文化与第二种情况不同,我没有丝毫的理由。
有什么建议吗?
文化可以存储为本地线程。如果您更改了活动线程的文化,它不会影响线程池线程。 –