zoukankan      html  css  js  c++  java
  • C#字典 Dictionary<Tkey,Tvalue> 之线程安全问题 ConcurrentDictionary<Tkey,Tvalue> 多线程字典

    ConcurrentDictionary<Tkey,Tvalue>  Model

    #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    // C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0mscorlib.dll
    #endregion
    
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Reflection;
    using System.Runtime.InteropServices;
    
    namespace System.Collections.Concurrent
    {
        //
        // 摘要:
        //     表示可由多个线程同时访问的键值对的线程安全集合。
        //
        // 类型参数:
        //   TKey:
        //     字典中的键的类型。
        //
        //   TValue:
        //     字典中的值的类型。
        [ComVisible(false)]
        [DebuggerDisplay("Count = {Count}")]
        [DebuggerTypeProxy(typeof(Generic.Mscorlib_DictionaryDebugView<,>))]
        [DefaultMember("Item")]
        public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable
        {
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例为空,具有默认的并发级别和默认的初始容量,并为键类型使用默认比较器。
            public ConcurrentDictionary();
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例包含从指定的 System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}
            //     中复制的元素,具有默认的并发级别和默认的初始容量,并为键类型使用默认比较器。
            //
            // 参数:
            //   collection:
            //     System.Collections.IEnumerable{KeyValuePair{TKey,TValue}},其中的元素将要复制到新的 System.Collections.Concurrent.ConcurrentDictionary`2
            //     中。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     collection 是 null 引用(在 Visual Basic 中为 Nothing)。
            //
            //   T:System.ArgumentException:
            //     collection 包含一个或多个重复键。
            public ConcurrentDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection);
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例为空,具有默认的并发级别和容量,并使用指定的
            //     System.Collections.Generic.IEqualityComparer{TKey}。
            //
            // 参数:
            //   comparer:
            //     在比较键时要使用的 System.Collections.Generic.IEqualityComparer{TKey} 实现。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     comparer 是 null 引用(在 Visual Basic 中为 Nothing)。
            public ConcurrentDictionary(IEqualityComparer<TKey> comparer);
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例为空,具有指定的并发级别和初始容量,并为键类型使用默认比较器。
            //
            // 参数:
            //   concurrencyLevel:
            //     将同时更新 System.Collections.Concurrent.ConcurrentDictionary`2 的线程的估计数量。
            //
            //   capacity:
            //     System.Collections.Concurrent.ConcurrentDictionary`2 可包含的初始元素数。
            //
            // 异常:
            //   T:System.ArgumentOutOfRangeException:
            //     concurrencyLevel 小于 1。- 或 -capacity 小于 0。
            public ConcurrentDictionary(int concurrencyLevel, int capacity);
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例包含从指定的 System.Collections.IEnumerable
            //     中复制的元素,具有默认的并发级别和默认的初始容量,并使用指定的 System.Collections.Generic.IEqualityComparer{TKey}。
            //
            // 参数:
            //   collection:
            //     System.Collections.IEnumerable{KeyValuePair{TKey,TValue}},其中的元素将要复制到新的 System.Collections.Concurrent.ConcurrentDictionary`2
            //     中。
            //
            //   comparer:
            //     在比较键时要使用的 System.Collections.Generic.IEqualityComparer{TKey} 实现。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     collection 是 null 引用(在 Visual Basic 中为 Nothing)。- 或 - comparer 是 null 引用(在 Visual
            //     Basic 中为 Nothing)。
            public ConcurrentDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer);
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例包含从指定的 System.Collections.IEnumerable
            //     中复制的元素,具有指定的并发级别和指定的初始容量,并使用指定的 System.Collections.Generic.IEqualityComparer{TKey}。
            //
            // 参数:
            //   concurrencyLevel:
            //     将同时更新 System.Collections.Concurrent.ConcurrentDictionary`2 的线程的估计数量。
            //
            //   collection:
            //     System.Collections.IEnumerable{KeyValuePair{TKey,TValue}},其中的元素将要复制到新的 System.Collections.Concurrent.ConcurrentDictionary`2
            //     中。
            //
            //   comparer:
            //     在比较键时要使用的 System.Collections.Generic.IEqualityComparer{TKey} 实现。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     collection 是 null 引用(在 Visual Basic 中为 Nothing)。 - 或 - comparer 是 null 引用(在 Visual
            //     Basic 中为 Nothing)。
            //
            //   T:System.ArgumentOutOfRangeException:
            //     concurrencyLevel 小于 1。
            //
            //   T:System.ArgumentException:
            //     collection 包含一个或多个重复键。
            public ConcurrentDictionary(int concurrencyLevel, IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer);
            //
            // 摘要:
            //     初始化 System.Collections.Concurrent.ConcurrentDictionary`2 类的新实例,该实例为空,具有指定的并发级别和指定的初始容量,并使用指定的
            //     System.Collections.Generic.IEqualityComparer{TKey}。
            //
            // 参数:
            //   concurrencyLevel:
            //     将同时更新 System.Collections.Concurrent.ConcurrentDictionary`2 的线程的估计数量。
            //
            //   capacity:
            //     System.Collections.Concurrent.ConcurrentDictionary`2 可包含的初始元素数。
            //
            //   comparer:
            //     在比较键时要使用的 System.Collections.Generic.IEqualityComparer{TKey} 实现。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     comparer 是 null 引用(在 Visual Basic 中为 Nothing)。
            //
            //   T:System.ArgumentOutOfRangeException:
            //     concurrencyLevel 小于 1。- 或 - capacity 小于 0。
            public ConcurrentDictionary(int concurrencyLevel, int capacity, IEqualityComparer<TKey> comparer);
    
            //
            // 摘要:
            //     获取或设置与指定的键相关联的值。
            //
            // 参数:
            //   key:
            //     要获取或设置的值的键。
            //
            // 返回结果:
            //     返回指定索引处的 System.Collections.Generic.KeyValuePair`2 的 Value 属性。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。
            //
            //   T:System.Collections.Generic.KeyNotFoundException:
            //     已检索该属性,并且集合中不存在 key。
            public TValue this[TKey key] { get; set; }
    
            //
            // 摘要:
            //     获取包含在 System.Collections.Concurrent.ConcurrentDictionary`2 中的键/值对的数目。
            //
            // 返回结果:
            //     包含在 System.Collections.Concurrent.ConcurrentDictionary`2 中的键/值对的数目。
            //
            // 异常:
            //   T:System.OverflowException:
            //     词典包含太多元素。
            public int Count { get; }
            //
            // 摘要:
            //     获取一个指示 System.Collections.Concurrent.ConcurrentDictionary`2 是否为空的值。
            //
            // 返回结果:
            //     如果 System.Collections.Concurrent.ConcurrentDictionary`2 为空,则为 true;否则为 false。
            public bool IsEmpty { get; }
            //
            // 摘要:
            //     获取包含 System.Collections.Generic.Dictionary{TKey,TValue} 中的键的集合。
            //
            // 返回结果:
            //     包含 System.Collections.Generic.Dictionary{TKey,TValue} 中的键的 System.Collections.Generic.ICollection{TKey}。
            public ICollection<TKey> Keys { get; }
            //
            // 摘要:
            //     获取包含 System.Collections.Generic.Dictionary{TKey,TValue} 中的值的集合。
            //
            // 返回结果:
            //     一个 System.Collections.Generic.ICollection{TValue},它包含 System.Collections.Generic.Dictionary{TKey,TValue}
            //     中的值。
            public ICollection<TValue> Values { get; }
    
            //
            // 摘要:
            //     如果指定的键尚不存在,则将键/值对添加到 System.Collections.Concurrent.ConcurrentDictionary`2 中;如果指定的键已存在,则更新
            //     System.Collections.Concurrent.ConcurrentDictionary`2 中的键/值对。
            //
            // 参数:
            //   key:
            //     要添加的键或应更新其值的键
            //
            //   addValueFactory:
            //     用于为空缺键生成值的函数
            //
            //   updateValueFactory:
            //     用于根据现有键的现有值为键生成新值的函数
            //
            // 返回结果:
            //     键的新值。这将是 addValueFactory 的结果(如果缺少键)或 updateValueFactory 的结果(如果存在键)。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。- 或 -addValueFactory 是 null 引用(在 Visual
            //     Basic 中为 Nothing)。- 或 -updateValueFactory 是 null 引用(在 Visual Basic 中为 Nothing)。
            //
            //   T:System.OverflowException:
            //     词典包含太多元素。
            public TValue AddOrUpdate(TKey key, Func<TKey, TValue> addValueFactory, Func<TKey, TValue, TValue> updateValueFactory);
            //
            // 摘要:
            //     如果指定的键尚不存在,则将键/值对添加到 System.Collections.Concurrent.ConcurrentDictionary`2 中;如果指定的键已存在,则更新
            //     System.Collections.Concurrent.ConcurrentDictionary`2 中的键/值对。
            //
            // 参数:
            //   key:
            //     要添加的键或应更新其值的键
            //
            //   addValue:
            //     要为空缺键添加的值
            //
            //   updateValueFactory:
            //     用于根据现有键的现有值为键生成新值的函数
            //
            // 返回结果:
            //     键的新值。这将是 addValue 的结果(如果缺少键)或 updateValueFactory 的结果(如果存在键)。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。- 或 -updateValueFactory 是 null 引用(在
            //     Visual Basic 中为 Nothing)。
            //
            //   T:System.OverflowException:
            //     词典包含太多元素。
            public TValue AddOrUpdate(TKey key, TValue addValue, Func<TKey, TValue, TValue> updateValueFactory);
            //
            // 摘要:
            //     从 System.Collections.Concurrent.ConcurrentDictionary`2 中移除所有的键和值。
            public void Clear();
            //
            // 摘要:
            //     确定 System.Collections.Concurrent.ConcurrentDictionary`2 是否包含指定的键。
            //
            // 参数:
            //   key:
            //     要在 System.Collections.Concurrent.ConcurrentDictionary`2 中查找的键。
            //
            // 返回结果:
            //     如果 System.Collections.Concurrent.ConcurrentDictionary`2 包含具有指定键的元素,则为 true;否则为
            //     false。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。
            public bool ContainsKey(TKey key);
            //
            // 摘要:
            //     返回循环访问 System.Collections.Concurrent.ConcurrentDictionary`2 的枚举器。
            //
            // 返回结果:
            //     System.Collections.Concurrent.ConcurrentDictionary`2 的一个枚举器。
            public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator();
            //
            // 摘要:
            //     如果指定的键尚不存在,则将键/值对添加到 System.Collections.Concurrent.ConcurrentDictionary`2 中。
            //
            // 参数:
            //   key:
            //     要添加的元素的键。
            //
            //   valueFactory:
            //     用于为键生成值的函数
            //
            // 返回结果:
            //     键的值。如果字典中已存在指定的键,则为该键的现有值;如果字典中不存在指定的键,则为 valueFactory 返回的键的新值。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。- 或 -valueFactory 是 null 引用(在 Visual
            //     Basic 中为 Nothing)。
            //
            //   T:System.OverflowException:
            //     词典包含太多元素。
            public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory);
            //
            // 摘要:
            //     如果指定的键尚不存在,则将键/值对添加到 System.Collections.Concurrent.ConcurrentDictionary`2 中。
            //
            // 参数:
            //   key:
            //     要添加的元素的键。
            //
            //   value:
            //     指定的键不存在时要添加的值
            //
            // 返回结果:
            //     键的值。如果字典中已存在指定的键,则为该键的现有值;如果字典中不存在指定的键,则为新值。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。
            //
            //   T:System.OverflowException:
            //     词典包含太多元素。
            public TValue GetOrAdd(TKey key, TValue value);
            //
            // 摘要:
            //     将 System.Collections.Concurrent.ConcurrentDictionary`2 中存储的键和值对复制到新数组中。
            //
            // 返回结果:
            //     一个新数组,其中包含从 System.Collections.Concurrent.ConcurrentDictionary`2 复制的键和值对的快照。
            public KeyValuePair<TKey, TValue>[] ToArray();
            //
            // 摘要:
            //     尝试将指定的键和值添加到 System.Collections.Concurrent.ConcurrentDictionary`2 中。
            //
            // 参数:
            //   key:
            //     要添加的元素的键。
            //
            //   value:
            //     要添加的元素的值。该值对于引用类型可以是空引用(在 Visual Basic 中为 Nothing)。
            //
            // 返回结果:
            //     如果已将键/值对成功添加到 System.Collections.Concurrent.ConcurrentDictionary`2 中,则为 true;否则为
            //     false。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。
            //
            //   T:System.OverflowException:
            //     System.Collections.Concurrent.ConcurrentDictionary`2 包含太多元素。
            public bool TryAdd(TKey key, TValue value);
            //
            // 摘要:
            //     尝试从 System.Collections.Concurrent.ConcurrentDictionary`2 获取与指定的键关联的值。
            //
            // 参数:
            //   key:
            //     要获取的值的键。
            //
            //   value:
            //     此方法返回时,value 包含 System.Collections.Concurrent.ConcurrentDictionary`2 中具有指定键的对象;如果操作失败,则包含默认值。
            //
            // 返回结果:
            //     如果在 System.Collections.Concurrent.ConcurrentDictionary`2 中找到该键,则为 true;否则为 false。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。
            public bool TryGetValue(TKey key, out TValue value);
            //
            // 摘要:
            //     尝试从 System.Collections.Concurrent.ConcurrentDictionary`2 中移除并返回具有指定键的值。
            //
            // 参数:
            //   key:
            //     要移除并返回的元素的键。
            //
            //   value:
            //     此方法返回时,value 包含从 System.Collections.Concurrent.ConcurrentDictionary`2 中移除的对象;如果操作失败,则包含默认值。
            //
            // 返回结果:
            //     如果成功移除了对象,则为 true;否则为 false。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 是 null 引用(在 Visual Basic 中为 Nothing)。
            public bool TryRemove(TKey key, out TValue value);
            //
            // 摘要:
            //     将指定键的现有值与指定值进行比较,如果相等,则用第三个值更新该键。
            //
            // 参数:
            //   key:
            //     其值将与 comparisonValue 进行比较并且可能被替换的键。
            //
            //   newValue:
            //     一个值,当比较结果相等时,将用该值替换具有 key 的元素的值。
            //
            //   comparisonValue:
            //     与具有 key 的元素的值进行比较的值。
            //
            // 返回结果:
            //     如果 key 的值与 comparisonValue 相等并替换为 newValue,则为 true;否则为 false。
            //
            // 异常:
            //   T:System.ArgumentNullException:
            //     key 为 null 引用。
            public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue);
        }
    }
    View Code

    //表示键和值的集合。

    Dictionary<TKey, TValue>  

  • 相关阅读:
    xUtils 中的BitmapUtils 全面注释
    321影音代码
    android studio使用技巧
    java android面试题分析总结
    android面试题分析总结
    据说年薪30万的Android程序员必须知道的帖子
    好用软件
    win10找回win7的windows照片查看器
    github上传代码
    android 常见错误集锦
  • 原文地址:https://www.cnblogs.com/DataBase-123/p/6726284.html
Copyright © 2011-2022 走看看