在C#中,要使IEnumerable<T>
线程安全,可以使用以下方法:
lock
关键字:private readonly object _lock = new object();
private IEnumerable<T> _items;
public void AddItem(T item)
{
lock (_lock)
{
var list = _items.ToList();
list.Add(item);
_items = list.AsEnumerable();
}
}
public IEnumerator<T> GetEnumerator()
{
lock (_lock)
{
return _items.GetEnumerator();
}
}
ConcurrentBag<T>
:private ConcurrentBag<T> _items = new ConcurrentBag<T>();
public void AddItem(T item)
{
_items.Add(item);
}
public IEnumerator<T> GetEnumerator()
{
return _items.GetEnumerator();
}
ReaderWriterLockSlim
:private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
private IEnumerable<T> _items;
public void AddItem(T item)
{
_lock.EnterWriteLock();
try
{
var list = _items.ToList();
list.Add(item);
_items = list.AsEnumerable();
}
finally
{
_lock.ExitWriteLock();
}
}
public IEnumerator<T> GetEnumerator()
{
_lock.EnterReadLock();
try
{
return _items.GetEnumerator();
}
finally
{
_lock.ExitReadLock();
}
}
推荐的腾讯云相关产品:
总结:
在C#中,要使IEnumerable<T>
线程安全,可以使用上述方法。每种方法都有其优缺点,具体选择哪种方法取决于具体的应用场景和性能要求。
领取专属 10元无门槛券
手把手带您无忧上云