Class ThreadSafeList<T>
Inheritance
System.Object
ThreadSafeList<T>
Implements
System.Collections.Generic.IList<T>
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IEnumerable<T>
System.Collections.IEnumerable
System.Collections.IList
System.Collections.ICollection
System.Collections.Generic.IReadOnlyList<T>
System.Collections.Generic.IReadOnlyCollection<T>
Assembly: Eco.Core.dll
Syntax
public class ThreadSafeList<T> : Object, IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>, ISnapshotable<T>, ISnapshotable
Type Parameters
Constructors
ThreadSafeList()
Declaration
ThreadSafeList(IEnumerable<T>)
Declaration
public ThreadSafeList(IEnumerable<T> contents)
Parameters
Type |
Name |
Description |
System.Collections.Generic.IEnumerable<T> |
contents |
|
Properties
Collection
Declaration
public ICollection<T> Collection { get; }
Property Value
Type |
Description |
System.Collections.Generic.ICollection<T> |
|
Count
Declaration
public int Count { get; }
Property Value
Type |
Description |
System.Int32 |
|
IsFixedSize
Declaration
public bool IsFixedSize { get; }
Property Value
Type |
Description |
System.Boolean |
|
IsReadOnly
Declaration
public bool IsReadOnly { get; }
Property Value
Type |
Description |
System.Boolean |
|
IsSynchronized
Declaration
public bool IsSynchronized { get; }
Property Value
Type |
Description |
System.Boolean |
|
Item[Int32]
Declaration
public virtual T this[int index] { get; set; }
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
Property Value
Snapshot
Gets current list read-only snapshot. May be used to get consistent result between different access calls.
Declaration
public ImmutableList<T> Snapshot { get; }
Property Value
Type |
Description |
System.Collections.Immutable.ImmutableList<T> |
|
SyncRoot
Declaration
public object SyncRoot { get; }
Property Value
Type |
Description |
System.Object |
|
TypeName
Declaration
public string TypeName { get; }
Property Value
Type |
Description |
System.String |
|
Methods
Add(T)
Declaration
public virtual void Add(T item)
Parameters
Type |
Name |
Description |
T |
item |
|
AddOrReplace(T, Predicate<T>)
Replaces first element matching the matcher
with item
or adds new item
if no one matched.
Declaration
public virtual void AddOrReplace(T item, Predicate<T> matcher)
Parameters
Type |
Name |
Description |
T |
item |
|
System.Predicate<T> |
matcher |
|
AddRange(IEnumerable<T>)
Declaration
public virtual void AddRange(IEnumerable<T> items)
Parameters
Type |
Name |
Description |
System.Collections.Generic.IEnumerable<T> |
items |
|
Clear()
Declaration
public virtual void Clear()
Contains(T)
Declaration
public bool Contains(T item)
Parameters
Type |
Name |
Description |
T |
item |
|
Returns
Type |
Description |
System.Boolean |
|
CopyTo(T[], Int32)
Declaration
public void CopyTo(T[] array, int arrayIndex)
Parameters
Type |
Name |
Description |
T[] |
array |
|
System.Int32 |
arrayIndex |
|
GetAndClear()
Declaration
public virtual ImmutableList<T> GetAndClear()
Returns
Type |
Description |
System.Collections.Immutable.ImmutableList<T> |
|
GetAt(Int32)
Declaration
public virtual T GetAt(int index)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
Returns
GetEnumerator()
Declaration
public ImmutableList<T>.Enumerator GetEnumerator()
Returns
Type |
Description |
System.Collections.Immutable.ImmutableList.Enumerator<> |
|
GetOrCreate(Predicate<T>, Func<T>)
Declaration
public virtual T GetOrCreate(Predicate<T> test, Func<T> create)
Parameters
Type |
Name |
Description |
System.Predicate<T> |
test |
|
System.Func<T> |
create |
|
Returns
IndexOf(T)
Declaration
public virtual int IndexOf(T item)
Parameters
Type |
Name |
Description |
T |
item |
|
Returns
Type |
Description |
System.Int32 |
|
IndexOf(Object)
Declaration
public virtual int IndexOf(object value)
Parameters
Type |
Name |
Description |
System.Object |
value |
|
Returns
Type |
Description |
System.Int32 |
|
Insert(Int32, T)
Declaration
public virtual void Insert(int index, T item)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
T |
item |
|
Move(Int32, Int32)
Declaration
public virtual void Move(int index, int newIndex)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
System.Int32 |
newIndex |
|
Remove(T)
Declaration
public virtual bool Remove(T item)
Parameters
Type |
Name |
Description |
T |
item |
|
Returns
Type |
Description |
System.Boolean |
|
RemoveAll(Predicate<T>)
Declaration
public virtual int RemoveAll(Predicate<T> match)
Parameters
Type |
Name |
Description |
System.Predicate<T> |
match |
|
Returns
Type |
Description |
System.Int32 |
|
RemoveAll(Predicate<T>, out ImmutableList<T>)
Removes all elements by match
and returns removed
elements in output parameter.
This operation is atomic and ensures that all returned elements belonging to this remove operation.
In example if you do something like
var l = items.ToList(); /* items may be added or removed */ items.RemoveAll(predicate); /* items may be added or removed */ var removed = l.Except(items);
then you may have inconsistent results where in removed
will be items which was added since call to RemoveAll
or removed since call to ToList
and may match the predicate
or you may miss some removed items if they added after call to ToList or added back to items since call to RemoveAll.
Declaration
public virtual void RemoveAll(Predicate<T> match, out ImmutableList<T> removed)
Parameters
Type |
Name |
Description |
System.Predicate<T> |
match |
|
System.Collections.Immutable.ImmutableList<T> |
removed |
|
RemoveAt(Int32)
Removes an element but doesnt return it (needed for implementing IList).
Declaration
public void RemoveAt(int index)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
RemoveAtAndReturn(Int32)
Remove the indexed element atomically and return it.
Declaration
public virtual T RemoveAtAndReturn(int index)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
Returns
RemoveFirst(Predicate<T>)
Removes first item matching the matcher
. Returns true
if item was removed.
Declaration
public virtual bool RemoveFirst(Predicate<T> matcher)
Parameters
Type |
Name |
Description |
System.Predicate<T> |
matcher |
|
Returns
Type |
Description |
System.Boolean |
|
RemoveNulls()
Declaration
public bool RemoveNulls()
Returns
Type |
Description |
System.Boolean |
|
RemoveRange(IEnumerable<T>)
Declaration
public virtual bool RemoveRange(IEnumerable<T> items)
Parameters
Type |
Name |
Description |
System.Collections.Generic.IEnumerable<T> |
items |
|
Returns
Type |
Description |
System.Boolean |
|
Set(IEnumerable<T>)
Declaration
public virtual void Set(IEnumerable<T> items)
Parameters
Type |
Name |
Description |
System.Collections.Generic.IEnumerable<T> |
items |
|
SetAt(Int32, T)
Declaration
public virtual void SetAt(int index, T obj)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
T |
obj |
|
Sort()
Declaration
public virtual void Sort()
Sort(IComparer<T>)
Declaration
public virtual void Sort(IComparer<T> comparer)
Parameters
Type |
Name |
Description |
System.Collections.Generic.IComparer<T> |
comparer |
|
Sort(Comparison<T>)
Declaration
public virtual void Sort(Comparison<T> comparison)
Parameters
Type |
Name |
Description |
System.Comparison<T> |
comparison |
|
Sort(Int32, Int32, IComparer<T>)
Declaration
public virtual void Sort(int index, int count, IComparer<T> comparer)
Parameters
Type |
Name |
Description |
System.Int32 |
index |
|
System.Int32 |
count |
|
System.Collections.Generic.IComparer<T> |
comparer |
|
ToArray()
Makes atomic ToArray operation. It isn't safe to use System.Linq.Enumerable.ToArray``1(System.Collections.Generic.IEnumerable{``0}), because it gets Count as a separate operation (and count may be modified in between).
Declaration
Returns
ToList()
Makes atomic ToList operation. It isn't safe to use System.Linq.Enumerable.ToList``1(System.Collections.Generic.IEnumerable{``0}), because it gets Count as a separate operation (and count may be modified in between).
Declaration
Returns
Type |
Description |
System.Collections.Generic.List<T> |
|
WithSnapshot(Action<IReadOnlyList<T>>)
Declaration
public void WithSnapshot(Action<IReadOnlyList<T>> action)
Parameters
Type |
Name |
Description |
System.Action<System.Collections.Generic.IReadOnlyList<T>> |
action |
Action to execute with read-only list.
|
WithSnapshot<TResult>(Func<IReadOnlyList<T>, TResult>)
Allows to execute action with immutable list for thread-safe calculations
I.e. you may want to get Count first and then make some calculations based on number of elements.
For separate Count and GetEnumerator operations you may have state changed between these two calls.
Declaration
public TResult WithSnapshot<TResult>(Func<IReadOnlyList<T>, TResult> action)
Parameters
Type |
Name |
Description |
System.Func<System.Collections.Generic.IReadOnlyList<T>, TResult> |
action |
Function to execute with read-only list.
|
Returns
Type Parameters
Name |
Description |
TResult |
Result of function applied to immutable list.
|
Explicit Interface Implementations
ISnapshotable.Snapshot
Declaration
ICollection ISnapshotable.Snapshot { get; }
Returns
Type |
Description |
System.Collections.ICollection |
|
ISnapshotable<T>.Snapshot
Declaration
ICollection<T> ISnapshotable<T>.Snapshot { get; }
Returns
Type |
Description |
System.Collections.Generic.ICollection<T> |
|
Implements
System.Collections.Generic.IList<>
System.Collections.Generic.ICollection<>
System.Collections.Generic.IEnumerable<>
System.Collections.IEnumerable
System.Collections.IList
System.Collections.ICollection
System.Collections.Generic.IReadOnlyList<>
System.Collections.Generic.IReadOnlyCollection<>
Extension Methods