Class ThreadSafeActions
Inheritance
System.Object
ThreadSafeActions
Assembly: Eco.Core.dll
Syntax
public static class ThreadSafeActions : Object
Methods
UpdateSubject<T, TAction>(ref T, T, Action<T, TAction>, Action<T, TAction>, TAction)
Updates subject (action emitter). It uses addAction and removeAction operations for adding action to new subject and removing from the old.
It is thread-safe and ensures old subscription removed from subject
even in concurrent environment.
It possible though that both newSubject
and subject
subscribed for short period of time. It is very rare case, but you should aware of it.
It happens if action removed from old subject, but subject changed in another thread after this, before new subject assigned (it will be removed anyway because of interlocked change, but it may exists for short period of time).
Declaration
public static void UpdateSubject<T, TAction>(ref T subject, T newSubject, Action<T, TAction> addAction, Action<T, TAction> removeAction, TAction action)
where T : class where TAction : Delegate
Parameters
Type |
Name |
Description |
T |
subject |
|
T |
newSubject |
|
System.Action<T, TAction> |
addAction |
|
System.Action<T, TAction> |
removeAction |
|
TAction |
action |
|
Type Parameters
Name |
Description |
T |
|
TAction |
|
UpdateSubject<T, TAction>(ref T, T, Func<T, ThreadSafeActionBase<TAction>>, TAction)
Updates ThreadSafeActionBase<TAction> subject (action emitter). It is thread-safe and ensures old subscription removed from subject
even in concurrent environment.
It possible though that both newSubject
and subject
subscribed. it is very rare case, but you should aware of it.
It happens if action removed from old subject, but subject changed in another thread after this, before new subject assigned (it will be removed anyway because of interlocked change, but it may exists for short period of time).
Declaration
public static void UpdateSubject<T, TAction>(ref T subject, T newSubject, Func<T, ThreadSafeActionBase<TAction>> actionAccessor, TAction action)
where T : class where TAction : Delegate
Parameters
Type |
Name |
Description |
T |
subject |
|
T |
newSubject |
|
System.Func<T, ThreadSafeActionBase<TAction>> |
actionAccessor |
|
TAction |
action |
|
Type Parameters
Name |
Description |
T |
|
TAction |
|