2008-11-24 103 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()这意味着您的代码可能同时在多个线程中运行。