首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#:如何使IEnumerable <T>线程安全?

在C#中,要使IEnumerable<T>线程安全,可以使用以下方法:

  1. 使用lock关键字:
代码语言:csharp
复制
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();
    }
}
  1. 使用ConcurrentBag<T>
代码语言:csharp
复制
private ConcurrentBag<T> _items = new ConcurrentBag<T>();

public void AddItem(T item)
{
    _items.Add(item);
}

public IEnumerator<T> GetEnumerator()
{
    return _items.GetEnumerator();
}
  1. 使用ReaderWriterLockSlim
代码语言:csharp
复制
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();
    }
}

推荐的腾讯云相关产品:

  • Cloud Server:腾讯云云服务器提供高性能、稳定、安全、可扩展的计算服务,适用于各种应用场景。
  • Cloud Object Storage:腾讯云对象存储为用户提供可扩展的数据存储服务,支持多种数据格式和应用场景。
  • Cloud Database:腾讯云数据库提供稳定、安全、可扩展的数据库服务,支持多种数据库类型。
  • Cloud Load Balancer:腾讯云负载均衡器可以帮助用户在多个服务器之间分配流量,提高应用程序的可用性和性能。
  • Cloud CDN:腾讯云内容分发网络可以加速用户的网站访问速度,降低服务器负载,提高用户体验。

总结:

在C#中,要使IEnumerable<T>线程安全,可以使用上述方法。每种方法都有其优缺点,具体选择哪种方法取决于具体的应用场景和性能要求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券