ADDメソッドを介して(並列foreachのように)並列に子要素をXElementに追加するのは安全ですか?
ありがとう!
ADDメソッドを介して(並列foreachのように)並列に子要素をXElementに追加するのは安全ですか?
ありがとう!
ドキュメントから:
このタイプのパブリック静的(Visual Basicで共有)メンバーはすべてスレッドセーフです。インスタンスメンバーは、スレッドセーフであることが保証されていません。
言い換えれば、いいえ、add
メソッドはスレッドセーフではありません。
最近の(苦痛な)経験から、それは非常に非常に安全ではないスレッドだと思います。
私は、それぞれ740万と880万の余分な不要なXElementインスタンスを含むいくつかのダンプファイルを分析しました。私が判断できる最善の方法として、XElementのサブノードの操作(場合によってはAdd()の呼び出しを含む)を含む無害に見えるコードが2つのスレッドプールスレッドから同時に呼び出されたときに作成されました。
これはそれほど驚くべきことではありません-XElementと関連するクラスは、リンクリストのような構造を使用して実装されます。リンク参照をスクランブルすると、ループ、アタッチされていないフラグメントなど、さまざまな奇妙な結果が生じる可能性があります。