Skip to content

Class TaskConcurrentDictionary<TKey, TValue>

Namespace: Tool.Utils.Data
Assembly: Tool.Net.dll

完全保证的多线程可等待字典,表示可由多个线程同时访问的键/值对的线程安全集合。

csharp
public class TaskConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, IAsyncEnumerable<KeyValuePair<TKey, TValue>>

Type Parameters

TKey

字典中的键的类型。

TValue

字典中的值的类型。

Inheritance

objectTaskConcurrentDictionary<TKey, TValue>

Implements

IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, IAsyncEnumerable<KeyValuePair<TKey, TValue>>

Inherited Members

object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()

Extension Methods

ObjectExtension.Add<T>(object, object, object), DictionaryExtension.AsReadOnly<TKey, TValue>(IDictionary<TKey, TValue>), ObjectExtension.CopyEntity(object, object, params string[]), ObjectExtension.EntityToJson(object), ObjectExtension.EntityToJson(object, bool), ObjectExtension.EntityToJson(object, bool, string), DictionaryExtension.GetDictionary(object), TypeExtension.GetFieldKey(object, string, out bool), TypeExtension.GetFieldKey<T>(object, string, out bool), TypeExtension.GetFieldKey(object, Type, string, out bool), ObjectExtension.GetIntPtr(object), ObjectExtension.GetIntPtrInt(object), TypeExtension.GetPropertieFind(object, string, bool), TypeExtension.GetProperties(object), TypeExtension.GetPropertyKey(object, string, out bool), TypeExtension.GetPropertyKey<T>(object, string, out bool), TypeExtension.GetPropertyKey(object, Type, string, out bool), TypeExtension.GetValue(object, PropertyDescriptor), TypeExtension.GetValue(object, string, bool), TypeExtension.GetValue(object, string), DictionaryExtension.NewDictionary<TKey, TValue>(IDictionary<TKey, TValue>), ObjectExtension.Read<T>(object, object, int, int), ObjectExtension.Read<T>(object, int, object, int, int), DictionaryExtension.Remove<TKey, TValue>(IDictionary<TKey, TValue>, params TKey[]), DictionaryExtension.SetDictionary(object, IDictionary<string, object>), TypeExtension.SetFieldKey(object, string, object), TypeExtension.SetFieldKey<T>(object, string, object), TypeExtension.SetFieldKey(object, Type, string, object), TypeExtension.SetPropertyKey(object, string, object), TypeExtension.SetPropertyKey<T>(object, string, object), TypeExtension.SetPropertyKey(object, Type, string, object), TypeExtension.SetValue(object, PropertyDescriptor, object), TypeExtension.SetValue(object, string, object, bool), TypeExtension.SetValue(object, string, object), ObjectExtension.ToBase64String(object), ObjectExtension.ToBytes(object), ObjectExtension.ToBytes(object, out Type), DictionaryExtension.ToDictionary(object), DictionaryExtension.ToDictionary<T>(object), DictionaryExtension.ToIDictionary(object), DictionaryExtension.ToIDictionary<T>(object), ObjectExtension.ToJson(object), ObjectExtension.ToJson(object, JsonSerializerOptions), ObjectExtension.ToJsonWeb(object), ObjectExtension.ToJsonWeb(object, Action<JsonSerializerOptions>), ObjectExtension.ToTryVar<T>(object, T), ObjectExtension.ToVar<T>(object), ObjectExtension.ToVar(object, Type, bool), ObjectExtension.ToVar(object, string), ObjectExtension.ToXml(object), DictionaryExtension.TryRemove<TKey, TValue>(IDictionary<TKey, TValue>, out TKey[], params TKey[])

Remarks

代码由逆血提供支持

Constructors

TaskConcurrentDictionary()

初始化

csharp
public TaskConcurrentDictionary()

Properties

Count

获取包含在 中的键/值对的数目。

csharp
public int Count { get; }

Property Value

int

Exceptions

OverflowException

字典已包含最大数目的元素 (System.Int32.MaxValue)。

IsEmpty

获取一个指示 是否为空的值。

csharp
public bool IsEmpty { get; }

Property Value

bool

IsReadOnly

获取一个值,该值指示 是否为只读。(无效参数)

csharp
public bool IsReadOnly { get; }

Property Value

bool

Keys

获取包含 中的键的集合。

csharp
public ICollection<TKey> Keys { get; }

Property Value

ICollection<TKey>

Values

获取包含 中的值的集合。 (作者并不建议使用该字段,开销有点大)

csharp
public ICollection<TValue> Values { get; }

Property Value

ICollection<TValue>

this[TKey]

获取或设置与指定的键相关联的值。

csharp
public TValue this[TKey key] { get; set; }

Property Value

TValue

Exceptions

ArgumentNullException

key 为 null。

KeyNotFoundException

已检索该属性,并且集合中不存在 key。

Methods

Add(TKey, TValue)

中添加一个带有所提供的键和值的元素。

csharp
public void Add(TKey key, TValue value)

Parameters

key TKey

用作要添加的元素的键的对象。

value TValue

作为要添加的元素的值的对象。

Add(KeyValuePair<TKey, TValue>)

中添加一个带有所提供的键和值的元素。

csharp
public void Add(KeyValuePair<TKey, TValue> item)

Parameters

item KeyValuePair<TKey, TValue>

单个对象的键值对

AddOrUpdate(TKey, Task<TValue>, Func<TKey, Task<TValue>, Task<TValue>>)

使用指定的函数将键/值对添加到 如果密钥已经存在,更新系统中的密钥/值对。如果密钥不存在 则添加进去。

csharp
public Task<TValue> AddOrUpdate(TKey key, Task<TValue> addValue, Func<TKey, Task<TValue>, Task<TValue>> updateValueFactory)

Parameters

key TKey

元素的键

addValue Task<TValue>

新增的内容

updateValueFactory Func<TKey, Task<TValue>, Task<TValue>>

修改的内容委托

Returns

Task<TValue>

返回值

AddOrUpdate(TKey, Func<TKey, Task<TValue>>, Func<TKey, Task<TValue>, Task<TValue>>)

使用指定的函数将键/值对添加到 如果密钥已经存在,更新系统中的密钥/值对。如果密钥不存在 则添加进去。

csharp
public Task<TValue> AddOrUpdate(TKey key, Func<TKey, Task<TValue>> addValueFactory, Func<TKey, Task<TValue>, Task<TValue>> updateValueFactory)

Parameters

key TKey

元素的键

addValueFactory Func<TKey, Task<TValue>>

新增的内容委托

updateValueFactory Func<TKey, Task<TValue>, Task<TValue>>

修改的内容委托

Returns

Task<TValue>

返回值

AddOrUpdate<TArg>(TKey, Func<TKey, TArg, Task<TValue>>, Func<TKey, Task<TValue>, TArg, Task<TValue>>, TArg)

使用指定的函数将键/值对添加到 如果密钥已经存在,更新系统中的密钥/值对。如果密钥不存在 则添加进去。

csharp
public Task<TValue> AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, Task<TValue>> addValueFactory, Func<TKey, Task<TValue>, TArg, Task<TValue>> updateValueFactory, TArg factoryArgument)

Parameters

key TKey

元素的键

addValueFactory Func<TKey, TArg, Task<TValue>>

新增的内容委托

updateValueFactory Func<TKey, Task<TValue>, TArg, Task<TValue>>

修改的内容委托

factoryArgument TArg

传入的额外对象

Returns

Task<TValue>

返回值

Type Parameters

TArg

Clear()

中移除所有的键和值。

csharp
public void Clear()

ContainsKey(TKey)

确定 是否包含指定的键。

csharp
public bool ContainsKey(TKey key)

Parameters

key TKey

要在 中定位的键。

Returns

bool

如果 包含具有指定键的元素,则为 true;否则为 false。

Exceptions

ArgumentNullException

key 为 null。

GetAsyncEnumerator(CancellationToken)

异步迭代器

csharp
public IAsyncEnumerator<KeyValuePair<TKey, TValue>> GetAsyncEnumerator(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Returns

IAsyncEnumerator<KeyValuePair<TKey, TValue>>

GetEnumerator()

返回循环访问 的枚举数。

csharp
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()

Returns

IEnumerator<KeyValuePair<TKey, TValue>>

的一个枚举数。

GetOrAdd(TKey, Func<TKey, Task<TValue>>)

如果该键尚不存在,则使用指定函数将键/值对添加到

csharp
public Task<TValue> GetOrAdd(TKey key, Func<TKey, Task<TValue>> valueFactory)

Parameters

key TKey

要添加的元素的键。

valueFactory Func<TKey, Task<TValue>>

用于为键生成值的函数

Returns

Task<TValue>

键的值。 如果字典中已存在指定的键,则为该键的现有值;如果字典中不存在指定的键,则为 valueFactory 返回的键的新值。

Exceptions

ArgumentNullException

valueFactory 为 null。

OverflowException

字典已包含最大数目的元素 (System.Int32.MaxValue)。

GetOrAdd(TKey, TValue)

如果该键尚不存在,则使用指定函数将键/值对添加到

csharp
public Task<TValue> GetOrAdd(TKey key, TValue value)

Parameters

key TKey

要添加的元素的键。

value TValue

用于为键生成值的函数

Returns

Task<TValue>

键的值。 如果字典中已存在指定的键,则为该键的现有值;如果字典中不存在指定的键,则为新值。

Exceptions

ArgumentNullException

value 为 null。

OverflowException

字典已包含最大数目的元素 (System.Int32.MaxValue)。

Remove(TKey)

尝试从 中移除。

csharp
public bool Remove(TKey key)

Parameters

key TKey

要移除并返回的元素的键。

Returns

bool

如果已成功移除对象,则为 true;否则为 false。

ToString()

显示结果

csharp
public override string ToString()

Returns

string

TryAdd(TKey, TValue)

中添加一个带有所提供的键和值的元素。

csharp
public bool TryAdd(TKey key, TValue value)

Parameters

key TKey

用作要添加的元素的键的对象。

value TValue

作为要添加的元素的值的对象。

Returns

bool

如果该键/值对已成功添加到 ,则为 true;如果该键已存在,则为 false。

Exceptions

ArgumentNullException

value 为 null。

OverflowException

字典已包含最大数目的元素 (System.Int32.MaxValue)。

TryAdd(TKey, Func<TKey, Task<TValue>>)

中添加一个带有所提供的键和值的元素。

csharp
public bool TryAdd(TKey key, Func<TKey, Task<TValue>> addValueFactory)

Parameters

key TKey

用作要添加的元素的键的对象。

addValueFactory Func<TKey, Task<TValue>>

作为要添加的元素的值的委托。

Returns

bool

如果该键/值对已成功添加到 ,则为 true;如果该键已存在,则为 false。

Exceptions

ArgumentNullException

value 为 null。

OverflowException

字典已包含最大数目的元素 (System.Int32.MaxValue)。

TryGetValue(TKey, out Task<TValue>)

尝试从 获取与指定的键关联的值。

csharp
public bool TryGetValue(TKey key, out Task<TValue> value)

Parameters

key TKey

要获取的值的键。

value Task<TValue>

当此方法返回时,将包含 中具有指定键的对象;如果操作失败,则包含默认值。

Returns

bool

如果在 System.Collections.Concurrent.ConcurrentDictionary`2 中找到该键,则为 true;否则为 false。

Exceptions

ArgumentNullException

key 为 null。

TryRemove(TKey, out TValue)

尝试从 中移除。

csharp
public bool TryRemove(TKey key, out TValue value)

Parameters

key TKey

要移除并返回的元素的键。

value TValue

当此方法返回时,将包含从 中移除的对象;如果 key 不存在,则包含 TValue 类型。

Returns

bool

如果已成功移除对象,则为 true;否则为 false。

TryUpdate(TKey, Task<TValue>, Task<TValue>)

尝试从 中修改数据(对比数据不一致时进行修改)

csharp
public bool TryUpdate(TKey key, Task<TValue> newValue, Task<TValue> comparisonValue)

Parameters

key TKey

要修改的元素的键

newValue Task<TValue>

修改的内容

comparisonValue Task<TValue>

比较的内容

Returns

bool

如果已成功修改对象,则为 true;否则为 false。

TryUpdate(TKey, Func<TKey, Task<TValue>>, Task<TValue>)

尝试从 中修改数据(对比数据不一致时进行修改)

csharp
public bool TryUpdate(TKey key, Func<TKey, Task<TValue>> addValueFactory, Task<TValue> comparisonValue)

Parameters

key TKey

要修改的元素的键

addValueFactory Func<TKey, Task<TValue>>

修改的内容委托

comparisonValue Task<TValue>

比较的内容

Returns

bool

如果已成功修改对象,则为 true;否则为 false。

基于Apache-2.0协议开源