我刚刚读到 C# 集合不是线程安全的,如果我每次在函数内创建一个新的集合实例作为局部变量会怎样?难道还不是线程安全的吗?
public void AddToCollection(int item)
{
List<int> collection = new List<int>();
collection.Add(item);
}
你的问题有点含糊。
线程安全是指一个对象或方法是否可以被多个线程同时访问。从这个意义上说,答案是不,本地
List<T>
仍然是线程不安全的。
如果您问,多个线程同时调用
AddToCollection
是否安全?答案是是,因为任何时候,这个列表都只能通过这个方法来访问,而且没有多线程,自然是安全的。
再次需要注意的是,如果你在这个方法中创建了多个访问列表的线程,那么这个列表仍然是不安全的。例如,这是不安全的:
public void AddToCollection(int item)
{
List<int> collection = new List<int>();
Task.Run(() => collection.Add(item));
Task.Run(() => collection.Add(item));
}