2010-02-28 68 views

回答

6

這與List構造函數是線程安全無關,它只取決於IEnumerable是否線程安全。

構造函數不是線程安全的,但在這種情況下這不是問題。構造函數沒有做任何有損線程安全的事情,IEnumerable的線程安全性可能是一個問題。

+0

有特殊情況,但大多數構造函數自然是「線程安全的」。這是因爲在構造函數返回之前,其他線程通常無法獲得對該對象的引用。這個答案完全正確,它取決於具體的IEnumerable 實現。 – 2010-02-28 22:42:01

+0

好吧我懷疑是這樣的情況,但我不太確定,因爲我做了一些性能比較列表(IEnumerable )和列表 .AddRange(IEnumerable )和前者似乎表現好於後者。感謝您的快速回答! – scim 2010-02-28 23:11:38

1

這並不是真的取決於正在構建的列表,而是由迭代的特定IEnumerable<T>決定。是這個線程安全嗎?如果它不支持併發迭代和編輯,那麼預計會發生異常(或更糟糕:不可預知的結果)。大多數.NET迭代器都不會這樣; 4.0引入了更多的併發集合,或者你可以編寫自己的集合。

如果列表成功createD(迭代源),然後一旦構造原點沒有影響 - 兩者斷開連接。