更具体地说,如果用于初始化列表的IEnumerable在构建新列表期间被修改,那么List(T)(IEnumerable(T))是否线程安全?
这与List构造函数是否线程安全无关,它仅取决于IEnumerable是否线程安全。
构造函数不是线程安全的,但在这种情况下并不是问题。构造函数没有做任何会影响其线程安全性的事情,可能存在问题的是IEnumerable的线程安全性。
这不完全取决于正在构建的列表,而是取决于正在迭代的特定 IEnumerable<T>
。 这个 线程安全吗?如果它不支持并发迭代和编辑,则会出现异常(或更糟糕的是:不可预测的结果)。大多数 .NET 迭代器都不喜欢这样做;4.0 引入了更多的并发集合,或者您可以编写自己的。
如果成功创建了列表(迭代源),则一旦构建完成,原始列表就不再影响 - 两者是分离的。