Безопасна ли операция добавления XElement? - PullRequest
5 голосов
/ 20 ноября 2010

Безопасно ли добавлять дочерние элементы в XElement с помощью метода ADD параллельно (как в foreach параллельно)?

Спасибо!

Ответы [ 2 ]

9 голосов
/ 20 ноября 2010

Из документации :

Любая общедоступная статика (Shared в Visual Основные) члены этого типа являются потоками безопасный. Любые члены экземпляра не являются гарантированно безопасен для потоков.

Другими словами, нет, метод add не является поточно-ориентированным.

0 голосов
/ 11 июня 2011

Недавний (болезненный) опыт заставляет меня думать, что это очень, ОЧЕНЬ опасно.

Я проанализировал пару файлов дампа, которые содержали 7,4 миллион и 8,8 миллиона дополнительных нежелательных экземпляров XElement соответственно. Насколько я могу судить, они были созданы, когда какой-то безобидно выглядящий код, включающий манипулирование подузлами XElement (в том числе вызывающий Add () в некоторых случаях), вызывался из двух потоков пула потоков одновременно.

Это не так уж и удивительно - XElement и связанные с ним классы реализованы с использованием структур, похожих на связанный список, и если вы скремблируете ссылки, вы получите множество странных результатов - циклы, неприкрепленные фрагменты и т. Д.

...