C#基础--线程安全集合
前言:
随着多线程的使用变得越来越频繁,集合安全也成了开发者不得不面对的一个问题,好在.NetFramework 4.0 引入了命名空间:System.Colletion.Concurrent,其命名空间下的类型都是线程安全的。
一、ConcurrentQueue
• Add:向集合中插入元素 • TryTake:从集合中取出元素并删除 • TryPeek:从集合中取出元素,但不删除该元素。
二、ConcurrentStack
三、ConcurrentBag
四、ConcurrentDictionary
•AddOrUpdate:如果键不存在,方法会在容器中添加新的键和值,如果存在,则更新现有的键和值。 •GetOrAdd:如果键不存在,方法会向容器中添加新的键和值,如果存在则返回现有的值,并不添加新值。 •TryAdd:尝试在容器中添加新的键和值。 •TryGetValue:尝试根据指定的键获得值。 •TryRemove:尝试删除指定的键。 •TryUpdate:有条件的更新当前键所对应的值。 •GetEnumerator:返回一个能够遍历整个容器的枚举器。
五、BlockCollection
•Add :向容器中插入元素 •TryTake:从容器中取出元素并删除 •TryPeek:从容器中取出元素,但不删除。 •CompleteAdding:告诉容器,添加元素完成。此时如果还想继续添加会发生异常。 •IsCompleted:告诉消费线程,生产者线程还在继续运行中,任务还未完成。
以上集合都继承了IProducerConsumerCollection<T>, IEnumerable<T>, IEnumerable, ICollection这些接口,可在foreach中遍历