Tip
If you want to wrap any ICollectionT into a thread-safe wrapper without copying the actual items, then you can also use LockingCollectionT.
[SerializableAttribute]
public class ThreadSafeHashSet<T> : ICollection<T>,
IEnumerable<T>, IEnumerable, ICollection, ISerializable, IDeserializationCallback,
IReadOnlyCollection<T>
<SerializableAttribute>
Public Class ThreadSafeHashSet(Of T)
Implements ICollection(Of T), IEnumerable(Of T),
IEnumerable, ICollection, ISerializable, IDeserializationCallback, IReadOnlyCollection(Of T)
[SerializableAttribute]
generic<typename T>
public ref class ThreadSafeHashSet : ICollection<T>,
IEnumerable<T>, IEnumerable, ICollection, ISerializable, IDeserializationCallback,
IReadOnlyCollection<T>
[<SerializableAttribute>]
type ThreadSafeHashSet<'T> =
class
interface ICollection<'T>
interface IEnumerable<'T>
interface IEnumerable
interface ICollection
interface ISerializable
interface IDeserializationCallback
interface IReadOnlyCollection<'T>
end
ThreadSafeHashSetT uses a very similar approach to ThreadSafeDictionaryTKey, TValue. It uses two separate internal storage: new items are added to a temporary storage using a single lock, which might regularly be merged into a faster lock-free storage, depending on the value of the MergeInterval property. Once the items are merged, their access (both read and write) becomes lock free. Even deleting and re-adding an item becomes faster after it has been merged into the lock-free storage.
This section contains some comparisons with other thread-safe collections.
When to prefer ThreadSafeHashSetT over ConcurrentDictionaryTKey, TValue:
When to prefer LockingCollectionT over ThreadSafeHashSetT:
Incompatibilities with HashSetT:
ThreadSafeHashSetT | Initializes a new instance of the ThreadSafeHashSetT class that is empty and uses the default comparer and Auto hashing strategy. |
ThreadSafeHashSetT(IEqualityComparerT, HashingStrategy) | Initializes a new instance of the ThreadSafeHashSetT class that is empty and uses the specified comparer and hashing strategy. |
ThreadSafeHashSetT(Int32, HashingStrategy) | Initializes a new instance of the ThreadSafeHashSetT class that is empty and uses the default comparer and the specified hashing strategy. |
ThreadSafeHashSetT(SerializationInfo, StreamingContext) | Initializes a new instance of the ThreadSafeHashSetT class from serialized data. |
ThreadSafeHashSetT(IEnumerableT, IEqualityComparerT, HashingStrategy) | Initializes a new instance of the ThreadSafeHashSetT class from the specified collection and uses the specified comparer and hashing strategy. |
ThreadSafeHashSetT(Int32, IEqualityComparerT, HashingStrategy) | Initializes a new instance of the ThreadSafeHashSetT class that is empty and uses the specified comparer and hashing strategy. |
Comparer | Gets the IEqualityComparerT that is used to determine equality of items for this ThreadSafeHashSetT. |
Count | Gets the number of elements contained in this ThreadSafeHashSetT. |
IsEmpty | Gets whether this ThreadSafeHashSetT is empty. |
MergeInterval |
Gets or sets the minimum lifetime for the temporarily created internal locking storage when adding new items to the ThreadSafeHashSetT.
Default value: 100 milliseconds. |
PreserveMergedItems |
Gets or sets whether items that have already been merged into the faster lock-free storage are preserved even when they are deleted.
Default value: . |
Add | Adds the specified item to the ThreadSafeHashSetT. |
Clear | Removes all items from the ThreadSafeHashSetT. |
Contains | Determines whether the ThreadSafeHashSetT contains the specified item. |
EnsureMerged |
Ensures that all elements in this ThreadSafeHashSetT are merged into the faster lock-free storage.
See the Remarks section of the MergeInterval property for details. |
GetEnumerator | Returns an enumerator that iterates through the items of this ThreadSafeHashSetT. |
GetObjectData | In a derived class populates a SerializationInfo with the additional data of the derived type needed to serialize the target object. |
OnDeserialization | In a derived class restores the state the deserialized instance. |
Remove | Tries to remove the specified item from the ThreadSafeHashSetT. |
Reset |
Removes all items from the ThreadSafeHashSetT.
See the Remarks section of the Clear method for details. |
ToArray | Copies the items stored in the ThreadSafeHashSetT to a new array. |
TrimExcess |
Forces to perform a merge while removing all possibly allocated but already deleted entries from the lock-free storage,
even if the PreserveMergedItems property is .
See the Remarks section of the PreserveMergedItems property for details. |
TryAdd | Tries to add the specified item to the ThreadSafeHashSetT. |
TryGetValue | Tries to get the actual stored item for the specified equalValue in the ThreadSafeHashSetT. It can be useful to obtain the actually stored reference when the Comparer can consider different instances equal. |
TryRemove | Tries to remove the specified item from the ThreadSafeHashSetT. |
AddRangeT |
Adds a collection to the target ICollectionT.
(Defined by CollectionExtensions) |
AsThreadSafeT |
Returns a LockingCollectionT, which provides a thread-safe wrapper for the specified collection.
This only means that if the members are accessed through the returned LockingCollectionT, then the inner state of the wrapped collection remains always consistent and not that all the multi-threading concerns can be ignored.
See the Remarks section of the LockingCollectionT class for details and some examples. (Defined by CollectionExtensions) |
Convert |
Converts an Object specified in the obj parameter to the desired targetType.
See the Examples section of the generic ConvertTTarget(Object, CultureInfo) overload for an example. (Defined by ObjectExtensions) |
ConvertTTarget |
Converts an Object specified in the obj parameter to the desired TTarget.
(Defined by ObjectExtensions) |
ForEachT |
Similarly to the List<T>.ForEach method, processes an action on each element of an enumerable collection.
(Defined by EnumerableExtensions) |
GetRandomElementT |
Gets a random element from the enumerable source using a new FastRandom instance.
(Defined by EnumerableExtensions) |
GetRandomElementT |
Gets a random element from the enumerable source using a specified Random instance.
(Defined by EnumerableExtensions) |
In |
Gets whether item is among the elements of set.
See the Examples section of the generic InT(T, T) overload for an example. (Defined by ObjectExtensions) |
IndexOf |
Searches for an element in the source enumeration where the specified predicate returns .
(Defined by EnumerableExtensions) |
IndexOf |
Searches for an element in the source enumeration.
(Defined by EnumerableExtensions) |
IndexOfT |
Searches for an element in the source enumeration where the specified predicate returns .
(Defined by EnumerableExtensions) |
IndexOfT |
Searches for an element in the source enumeration.
(Defined by EnumerableExtensions) |
IsNullOrEmpty |
Determines whether the specified source is or empty (has no elements).
(Defined by EnumerableExtensions) |
IsNullOrEmptyT |
Determines whether the specified source is or empty (has no elements).
(Defined by EnumerableExtensions) |
JoinT |
Concatenates the items of the source collection into a new string instance
using the specified separator between the items.
(Defined by EnumerableExtensions) |
JoinT |
Concatenates the items of the source collection into a new string instance
using the specified separator between the items.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using a new FastRandom instance.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using the provided seed with a new FastRandom instance.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using the provided seed with a new FastRandom instance.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using a specified Random instance.
(Defined by EnumerableExtensions) |
ToCircularListT |
Creates a CircularListT from an IEnumerableT.
(Defined by EnumerableExtensions) |
ToStringKeyedDictionaryT |
Creates a StringKeyedDictionaryTValue from an IEnumerableT instance using the specified keySelector delegate and a comparer.
(Defined by EnumerableExtensions) |
ToStringKeyedDictionaryT, TValue |
Creates a StringKeyedDictionaryTValue from an IEnumerableT instance using the specified key and value selector delegates and a comparer.
(Defined by EnumerableExtensions) |
TryAdd |
Tries to add the specified item to the collection.
(Defined by EnumerableExtensions) |
TryAddT |
Tries to add the specified item to the collection.
(Defined by EnumerableExtensions) |
TryAddRange |
Tries to add the specified collection to the target collection.
(Defined by EnumerableExtensions) |
TryAddRangeT |
Tries to add the specified collection to the target collection.
(Defined by EnumerableExtensions) |
TryClear |
Tries to remove all elements from the collection.
(Defined by EnumerableExtensions) |
TryClearT |
Tries to remove all elements from the collection.
(Defined by EnumerableExtensions) |
TryConvert |
Tries to convert an Object specified in the obj parameter to the desired targetType.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryConvert |
Tries to convert an Object specified in the obj parameter to the desired targetType.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryConvertTTarget |
Tries to convert an Object specified in the obj parameter to the desired TTarget.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryConvertTTarget |
Tries to convert an Object specified in the obj parameter to the desired TTarget.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryGetCount |
Tries to get the number of elements in the source enumeration without enumerating it.
(Defined by EnumerableExtensions) |
TryGetCountT |
Tries to get the number of elements in the source enumeration without enumerating it.
(Defined by EnumerableExtensions) |
TryGetElementAt |
Tries to get an item at the specified index in the collection.
(Defined by EnumerableExtensions) |
TryGetElementAtT |
Tries to get an item at the specified index in the collection.
(Defined by EnumerableExtensions) |
TryInsert |
Tries to insert the specified item at the specified index to the collection.
(Defined by EnumerableExtensions) |
TryInsertT |
Tries to insert the specified item at the specified index to the collection.
(Defined by EnumerableExtensions) |
TryInsertRange |
Tries to insert the specified collection into the target collection.
(Defined by EnumerableExtensions) |
TryInsertRangeT |
Tries to insert the specified collection into the target collection.
(Defined by EnumerableExtensions) |
TryRemove |
Tries to remove the specified item from to the collection.
(Defined by EnumerableExtensions) |
TryRemoveT |
Tries to remove the specified item from to the collection.
(Defined by EnumerableExtensions) |
TryRemoveAt |
Tries to remove an item at the specified index from the collection.
(Defined by EnumerableExtensions) |
TryRemoveAtT |
Tries to remove an item at the specified index from the collection.
(Defined by EnumerableExtensions) |
TryRemoveRange |
Tries to remove count amount of items from the specified collection at the specified index.
(Defined by EnumerableExtensions) |
TryRemoveRangeT |
Tries to remove count amount of items from the specified collection at the specified index.
(Defined by EnumerableExtensions) |
TryReplaceRange |
Tries to remove count amount of items from the target at the specified index, and
to insert the specified collection at the same position. The number of elements in collection can be different from the amount of removed items.
(Defined by EnumerableExtensions) |
TryReplaceRangeT |
Tries to remove count amount of items from the target at the specified index, and
to insert the specified collection at the same position. The number of elements in collection can be different from the amount of removed items.
(Defined by EnumerableExtensions) |
TrySetElementAt |
Tries to set the specified item at the specified index in the collection.
(Defined by EnumerableExtensions) |
TrySetElementAtT |
Tries to set the specified item at the specified index in the collection.
(Defined by EnumerableExtensions) |