我要找的文章,論壇或博客文章涉及SharePoint和線程安全?我非常確定在處理SharePoint對象模型時必須考慮到有關線程安全的一些特殊方面。SharePoint和線程安全
其實我沒有找到關於這個很多信息,但。
所以我很期待你的答案。
再見, 弗洛
我要找的文章,論壇或博客文章涉及SharePoint和線程安全?我非常確定在處理SharePoint對象模型時必須考慮到有關線程安全的一些特殊方面。SharePoint和線程安全
其實我沒有找到關於這個很多信息,但。
所以我很期待你的答案。
再見, 弗洛
所以做一些更多的谷歌搜索和Web和測試上進行搜索後,就好像你不必關心線程安全,許多使用MOSS對象模型,因爲你總是與非工作時靜態和唯一的實例。
此外則拋出異常時,對象例如即使您首先獲得了對象,但在保存更改(也調用Update()方法)之前,通過調用Update()方法更改並保存了SPWeb。
在以下示例中,指令web11.Update()
將引發異常,告訴您通過對象web12表示的SPWeb同時發生了變化。
SPSite siteCol1 = new SPSite("http://localhost");
SPWeb web11 = siteCol1.OpenWeb();
SPWeb web12 = siteCol1.OpenWeb();
web12.Title = "web12";
web12.Update();
web11.Title = "web11";
web11.Update();
因此,thready-safety似乎是由對象模型本身處理的。當然,你必須處理由於競賽條件而可能引發的異常。
有可在SharePoint OM不僅僅是普通的舊線程安全性差很多陷阱。特別注意處理從屬性中檢索的對象。你應該總是在的中保留一個指向對象的指針;例如:
var list = web.List["MyList"]
list.Items[0]["Field1"] = "foo"
list.Items[0]["Field2"] = "bar"
list.Items[0].Update() // nothing is updated!
您可能期望Field1和Field2被最終的Update()調用更新,但是不會被更新。每次使用索引器時,都會返回SPListItem的NEW引用。
正確方法:
SPListItem item = list.Items[0]
item["Field1"] = "foo"
item["Field2"] = "bar"
item.Update() // updated!
只是一個開始。另外谷歌的IDisposabe /處置模式周圍的陷阱。
-Oisin
有一個問題,我經常碰到:寫你自己的列表項的接收器時,你需要知道的事實:一些事件觸發的異步,例如ItemAdded()
這意味着您的代碼可能同時在多個線程中運行。
不是我尋找,但非常有趣的爲好。我會牢記這一點。 關於MOSS對象的處理問題,我在MSDN上發現了一篇有趣的文章:http://msdn.microsoft.com/en-us/library/aa973248.aspx – Flo 2008-11-24 16:11:17
你是完全正確的,但他問的是線程安全問題。 – 2008-11-24 17:15:39