Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是列表<;T>;构造函数线程安全?_C#_List_Thread Safety - Fatal编程技术网

C# 是列表<;T>;构造函数线程安全?

C# 是列表<;T>;构造函数线程安全?,c#,list,thread-safety,C#,List,Thread Safety,更具体地说,如果用于初始化列表的IEnumerable在构造新列表的过程中被修改,那么List(T)(IEnumerable(T))是线程安全的吗?这与列表构造函数是线程安全的无关,它只取决于IEnumerable是否是线程安全的 构造函数不是线程安全的,但在本例中这不是问题。构造函数没有做任何损害其线程安全的事情,这可能是IEnumerable的线程安全问题。这实际上并不取决于正在构造的列表,而是取决于正在迭代的特定的IEnumerable。这个线安全吗?如果它不支持并发迭代和编辑,那么可能会

更具体地说,如果用于初始化列表的IEnumerable在构造新列表的过程中被修改,那么List(T)(IEnumerable(T))是线程安全的吗?

这与列表构造函数是线程安全的无关,它只取决于IEnumerable是否是线程安全的


构造函数不是线程安全的,但在本例中这不是问题。构造函数没有做任何损害其线程安全的事情,这可能是IEnumerable的线程安全问题。

这实际上并不取决于正在构造的列表,而是取决于正在迭代的特定的
IEnumerable
。这个线安全吗?如果它不支持并发迭代和编辑,那么可能会出现异常(或者更糟:不可预测的结果)。大多数.NET迭代器都不喜欢这样;4.0引入了更多的并发集合,您也可以编写自己的集合


如果列表创建成功(对源代码进行迭代),那么一旦构建了源代码,就不会产生任何影响-这两个代码是断开的。

有一些特殊情况,但大多数构造函数自然是“线程安全的”。这是因为在构造函数返回之前,其他线程通常无法获得对该对象的引用。这个答案完全正确,因为它取决于具体的IEnumerable实现。好吧,我怀疑是这样,但我不太确定,因为我对List(IEnumerable)和List.AddRange(IEnumerable)进行了一些性能比较,前者的性能似乎比后者好。谢谢你快速的回答!