2008-11-24 113 views
2

我要找的文章,論壇或博客文章涉及SharePoint和線程安全?我非常確定在處理SharePoint對象模型時必須考慮到有關線程安全的一些特殊方面。SharePoint和線程安全

其實我沒有找到關於這個很多信息,但。

所以我很期待你的答案。

再見, 弗洛

回答

0

所以做一些更多的谷歌搜索和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似乎是由對象模型本身處理的。當然,你必須處理由於競賽條件而可能引發的異常。

7

有可在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

+0

不是我尋找,但非常有趣的爲好。我會牢記這一點。 關於MOSS對象的處理問題,我在MSDN上發現了一篇有趣的文章:http://msdn.microsoft.com/en-us/library/aa973248.aspx – Flo 2008-11-24 16:11:17

+1

你是完全正確的,但他問的是線程安全問題。 – 2008-11-24 17:15:39

2

有一個問題,我經常碰到:寫你自己的列表項的接收器時,你需要知道的事實:一些事件觸發的異步,例如ItemAdded()這意味着您的代碼可能同時在多個線程中運行。