XElement的添加操作线程安全吗?

时间:2010-11-19 22:46:52

标签: c# concurrency linq-to-xml thread-safety xelement

通过ADD方法以并行方式将子元素添加到XElement是否安全(如在并行foreach中)?

谢谢!

2 个答案:

答案 0 :(得分:9)

来自documentation

  

任何公共静态(在Visual中共享)   基本)这种类型的成员是线程   安全。任何实例成员都不是   保证是线程安全的。

换句话说,不,add方法不是线程安全的。

答案 1 :(得分:0)

最近(痛苦的)经历让我觉得它非常非常非常安全。

我分析了几个包含7.4 百万的转储文件和880万个额外的不需要的XElement实例。我可以确定,当一些无关紧要的代码涉及操纵XElement的子节点(在某些情况下包括调用Add())同时从两个线程池线程调用时,它们就被创建了。

这并不太令人惊讶 - XElement和相关的类是使用类似链表的结构实现的,如果你对链接引用进行加扰,可能会产生各种奇怪的结果 - 循环,未附加的片段等。