# System.Collections.Concurrent ``` diff +namespace System.Collections.Concurrent { + public class BlockingCollection : ICollection, IDisposable, IEnumerable, IEnumerable, IReadOnlyCollection { + public BlockingCollection(); + public BlockingCollection(IProducerConsumerCollection collection); + public BlockingCollection(IProducerConsumerCollection collection, int boundedCapacity); + public BlockingCollection(int boundedCapacity); + public int BoundedCapacity { get; } + public int Count { get; } + public bool IsAddingCompleted { get; } + public bool IsCompleted { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public void Add(T item); + public void Add(T item, CancellationToken cancellationToken); + public static int AddToAny(BlockingCollection[] collections, T item); + public static int AddToAny(BlockingCollection[] collections, T item, CancellationToken cancellationToken); + public void CompleteAdding(); + public void CopyTo(T[] array, int index); + public void Dispose(); + protected virtual void Dispose(bool disposing); + public IEnumerable GetConsumingEnumerable(); + public IEnumerable GetConsumingEnumerable(CancellationToken cancellationToken); + IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + public T Take(); + public T Take(CancellationToken cancellationToken); + public static int TakeFromAny(BlockingCollection[] collections, out T item); + public static int TakeFromAny(BlockingCollection[] collections, out T item, CancellationToken cancellationToken); + public T[] ToArray(); + public bool TryAdd(T item); + public bool TryAdd(T item, int millisecondsTimeout); + public bool TryAdd(T item, int millisecondsTimeout, CancellationToken cancellationToken); + public bool TryAdd(T item, TimeSpan timeout); + public static int TryAddToAny(BlockingCollection[] collections, T item); + public static int TryAddToAny(BlockingCollection[] collections, T item, int millisecondsTimeout); + public static int TryAddToAny(BlockingCollection[] collections, T item, int millisecondsTimeout, CancellationToken cancellationToken); + public static int TryAddToAny(BlockingCollection[] collections, T item, TimeSpan timeout); + public bool TryTake(out T item); + public bool TryTake(out T item, int millisecondsTimeout); + public bool TryTake(out T item, int millisecondsTimeout, CancellationToken cancellationToken); + public bool TryTake(out T item, TimeSpan timeout); + public static int TryTakeFromAny(BlockingCollection[] collections, out T item); + public static int TryTakeFromAny(BlockingCollection[] collections, out T item, int millisecondsTimeout); + public static int TryTakeFromAny(BlockingCollection[] collections, out T item, int millisecondsTimeout, CancellationToken cancellationToken); + public static int TryTakeFromAny(BlockingCollection[] collections, out T item, TimeSpan timeout); + } + public class ConcurrentBag : ICollection, IEnumerable, IEnumerable, IProducerConsumerCollection, IReadOnlyCollection { + public ConcurrentBag(); + public ConcurrentBag(IEnumerable collection); + public int Count { get; } + public bool IsEmpty { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public void Add(T item); + public void CopyTo(T[] array, int index); + public IEnumerator GetEnumerator(); + bool System.Collections.Concurrent.IProducerConsumerCollection.TryAdd(T item); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + public T[] ToArray(); + public bool TryPeek(out T result); + public bool TryTake(out T result); + } + public class ConcurrentDictionary : ICollection, ICollection>, IDictionary, IDictionary, IEnumerable, IEnumerable>, IReadOnlyCollection>, IReadOnlyDictionary { + public ConcurrentDictionary(); + public ConcurrentDictionary(IEnumerable> collection); + public ConcurrentDictionary(IEnumerable> collection, IEqualityComparer comparer); + public ConcurrentDictionary(IEqualityComparer comparer); + public ConcurrentDictionary(int concurrencyLevel, IEnumerable> collection, IEqualityComparer comparer); + public ConcurrentDictionary(int concurrencyLevel, int capacity); + public ConcurrentDictionary(int concurrencyLevel, int capacity, IEqualityComparer comparer); + public int Count { get; } + public bool IsEmpty { get; } + public ICollection Keys { get; } + bool System.Collections.Generic.ICollection>.IsReadOnly { get; } + IEnumerable System.Collections.Generic.IReadOnlyDictionary.Keys { get; } + IEnumerable System.Collections.Generic.IReadOnlyDictionary.Values { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + bool System.Collections.IDictionary.IsFixedSize { get; } + bool System.Collections.IDictionary.IsReadOnly { get; } + object System.Collections.IDictionary.this[object key] { get; set; } + ICollection System.Collections.IDictionary.Keys { get; } + ICollection System.Collections.IDictionary.Values { get; } + public TValue this[TKey key] { get; set; } + public ICollection Values { get; } + public TValue AddOrUpdate(TKey key, Func addValueFactory, Func updateValueFactory); + public TValue AddOrUpdate(TKey key, TValue addValue, Func updateValueFactory); + public void Clear(); + public bool ContainsKey(TKey key); + public IEnumerator> GetEnumerator(); + public TValue GetOrAdd(TKey key, Func valueFactory); + public TValue GetOrAdd(TKey key, TValue value); + void System.Collections.Generic.ICollection>.Add(KeyValuePair keyValuePair); + bool System.Collections.Generic.ICollection>.Contains(KeyValuePair keyValuePair); + void System.Collections.Generic.ICollection>.CopyTo(KeyValuePair[] array, int index); + bool System.Collections.Generic.ICollection>.Remove(KeyValuePair keyValuePair); + void System.Collections.Generic.IDictionary.Add(TKey key, TValue value); + bool System.Collections.Generic.IDictionary.Remove(TKey key); + void System.Collections.ICollection.CopyTo(Array array, int index); + void System.Collections.IDictionary.Add(object key, object value); + bool System.Collections.IDictionary.Contains(object key); + IDictionaryEnumerator System.Collections.IDictionary.GetEnumerator(); + void System.Collections.IDictionary.Remove(object key); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + public KeyValuePair[] ToArray(); + public bool TryAdd(TKey key, TValue value); + public bool TryGetValue(TKey key, out TValue value); + public bool TryRemove(TKey key, out TValue value); + public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue); + } + public class ConcurrentQueue : ICollection, IEnumerable, IEnumerable, IProducerConsumerCollection, IReadOnlyCollection { + public ConcurrentQueue(); + public ConcurrentQueue(IEnumerable collection); + public int Count { get; } + public bool IsEmpty { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public void CopyTo(T[] array, int index); + public void Enqueue(T item); + public IEnumerator GetEnumerator(); + bool System.Collections.Concurrent.IProducerConsumerCollection.TryAdd(T item); + bool System.Collections.Concurrent.IProducerConsumerCollection.TryTake(out T item); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + public T[] ToArray(); + public bool TryDequeue(out T result); + public bool TryPeek(out T result); + } + public class ConcurrentStack : ICollection, IEnumerable, IEnumerable, IProducerConsumerCollection, IReadOnlyCollection { + public ConcurrentStack(); + public ConcurrentStack(IEnumerable collection); + public int Count { get; } + public bool IsEmpty { get; } + bool System.Collections.ICollection.IsSynchronized { get; } + object System.Collections.ICollection.SyncRoot { get; } + public void Clear(); + public void CopyTo(T[] array, int index); + public IEnumerator GetEnumerator(); + public void Push(T item); + public void PushRange(T[] items); + public void PushRange(T[] items, int startIndex, int count); + bool System.Collections.Concurrent.IProducerConsumerCollection.TryAdd(T item); + bool System.Collections.Concurrent.IProducerConsumerCollection.TryTake(out T item); + void System.Collections.ICollection.CopyTo(Array array, int index); + IEnumerator System.Collections.IEnumerable.GetEnumerator(); + public T[] ToArray(); + public bool TryPeek(out T result); + public bool TryPop(out T result); + public int TryPopRange(T[] items); + public int TryPopRange(T[] items, int startIndex, int count); + } + public enum EnumerablePartitionerOptions { + NoBuffering = 1, + None = 0, + } + public interface IProducerConsumerCollection : ICollection, IEnumerable, IEnumerable { + void CopyTo(T[] array, int index); + T[] ToArray(); + bool TryAdd(T item); + bool TryTake(out T item); + } + public abstract class OrderablePartitioner : Partitioner { + protected OrderablePartitioner(bool keysOrderedInEachPartition, bool keysOrderedAcrossPartitions, bool keysNormalized); + public bool KeysNormalized { get; } + public bool KeysOrderedAcrossPartitions { get; } + public bool KeysOrderedInEachPartition { get; } + public override IEnumerable GetDynamicPartitions(); + public virtual IEnumerable> GetOrderableDynamicPartitions(); + public abstract IList>> GetOrderablePartitions(int partitionCount); + public override IList> GetPartitions(int partitionCount); + } + public static class Partitioner { + public static OrderablePartitioner> Create(int fromInclusive, int toExclusive); + public static OrderablePartitioner> Create(int fromInclusive, int toExclusive, int rangeSize); + public static OrderablePartitioner> Create(long fromInclusive, long toExclusive); + public static OrderablePartitioner> Create(long fromInclusive, long toExclusive, long rangeSize); + public static OrderablePartitioner Create(IEnumerable source); + public static OrderablePartitioner Create(IEnumerable source, EnumerablePartitionerOptions partitionerOptions); + public static OrderablePartitioner Create(IList list, bool loadBalance); + public static OrderablePartitioner Create(TSource[] array, bool loadBalance); + } + public abstract class Partitioner { + protected Partitioner(); + public virtual bool SupportsDynamicPartitions { get; } + public virtual IEnumerable GetDynamicPartitions(); + public abstract IList> GetPartitions(int partitionCount); + } +} ```