C# List<T>多线程安全
在C#中,List<T> 不是线程安全的。如果你需要在多线程环境中使用 List<T>,你必须确保对列表的访问是同步的,以避免竞争条件、数据损坏或其他线程安全问题。
以下是一些确保 List<T> 在多线程环境中安全使用的方法:
使用锁(Lock)
使用 lock 语句可以确保在同一时刻只有一个线程能够访问 List<T>。
C# 全选
private readonly object _lock = new object();
private List<T> _list = new List<T>();
public void AddItem(T item)
{
    lock (_lock)
    {
        _list.Add(item);
    }
}
public T GetItem(int index)
{
    lock (_lock)
    {
        return _list[index];
    }
}使用线程安全集合
.NET 提供了一些线程安全的集合,如 ConcurrentBag<T>, ConcurrentQueue<T>, ConcurrentStack<T> 和 BlockingCollection<T>。
例如,使用 ConcurrentBag<T>:
C# 全选
private ConcurrentBag<T> _concurrentBag = new ConcurrentBag<T>();
public void AddItem(T item)
{
    _concurrentBag.Add(item);
}
public bool TryTake(out T result)
{
    return _concurrentBag.TryTake(out result);
}使用 ReadOnlyCollection<T>
如果你只需要在多个线程中读取 List<T>,则可以将其暴露为一个 ReadOnlyCollection<T>,这样就可以保证读操作是线程安全的。
C# 全选
private List<T> _list = new List<T>();
public ReadOnlyCollection<T> ReadOnlyList => _list.AsReadOnly();
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生  
 
 

