今天我遇到了一個奇怪的現象,我無法真正解釋。在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的文化與第二種情況不同,我沒有絲毫的理由。
有什麼建議嗎?
文化可以存儲爲本地線程。如果您更改了活動線程的文化,它不會影響線程池線程。 –