5

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

谢谢!

4

2 回答 2

9

文档中:

此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。

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

于 2010-11-19T22:49:14.883 回答
0

最近(痛苦的)经历让我认为这是非常非常不安全的线程。

我分析了几个转储文件,它们分别包含 740个和 880 万个额外不需要的 XElement 实例。据我所知,它们是在同时从两个线程池线程中调用一些涉及操作 XElement 的子节点(包括在某些情况下调用 Add() )的看似无害的代码时创建的。

这并不令人惊讶——XElement 和相关的类是使用类似链表的结构实现的,如果你打乱链接引用,可能会出现各种奇怪的结果——循环、未附加的片段等。

于 2011-06-10T20:30:05.733 回答