Class AsyncBarrier
Enables multiple tasks to cooperatively work on an algorithm in parallel through multiple phases.
Namespace: DotNext.Threading
Assembly: DotNext.Threading.dll
Syntax
public class AsyncBarrier : Disposable, IAsyncEvent, ISynchronizer, IDisposable
Remarks
This is asynchronous version of Barrier with small differences:
- Post-phase action is presented by virtual method PostPhase(Int64).
- It it possible to wait for phase completion without signal.
- It is possible to signal without waiting of phase completion.
- Post-phase action is asynchronous.
- Number of phases is limited by Int64 data type.
Constructors
| Improve this Doc View SourceAsyncBarrier(Int64)
Initializes a new Barrier withe given number of participating tasks.
Declaration
public AsyncBarrier(long participantCount)
Parameters
Type | Name | Description |
---|---|---|
Int64 | participantCount | The number of participating tasks. |
Exceptions
Type | Condition |
---|---|
ArgumentOutOfRangeException |
|
Properties
| Improve this Doc View SourceCurrentPhaseNumber
Gets the number of the barrier's current phase.
Declaration
public long CurrentPhaseNumber { get; }
Property Value
Type | Description |
---|---|
Int64 |
ParticipantCount
Gets the total number of participants in the barrier.
Declaration
public long ParticipantCount { get; }
Property Value
Type | Description |
---|---|
Int64 |
ParticipantsRemaining
Gets the number of participants in the barrier that haven't yet signaled in the current phase.
Declaration
public long ParticipantsRemaining { get; }
Property Value
Type | Description |
---|---|
Int64 |
Methods
| Improve this Doc View SourceAddParticipant()
Notifies this barrier that there will be additional participant.
Declaration
public long AddParticipant()
Returns
Type | Description |
---|---|
Int64 | The phase number of the barrier in which the new participants will first participate. |
Exceptions
Type | Condition |
---|---|
ObjectDisposedException | The current instance has already been disposed. |
AddParticipants(Int64)
Notifies this barrier that there will be additional participants.
Declaration
public long AddParticipants(long participantCount)
Parameters
Type | Name | Description |
---|---|---|
Int64 | participantCount | The number of additional participants to add to the barrier. |
Returns
Type | Description |
---|---|
Int64 | The phase number of the barrier in which the new participants will first participate. |
Exceptions
Type | Condition |
---|---|
ArgumentOutOfRangeException |
|
ObjectDisposedException | The current instance has already been disposed. |
Dispose(Boolean)
Releases all resources associated with this barrier.
Declaration
protected override void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
Boolean | disposing | Indicates whether the Dispose(Boolean) has been called directly or from finalizer. |
Remarks
This method is not thread-safe and may not be used concurrently with other members of this instance.
PostPhase(Int64)
The action to be executed after each phase.
Declaration
protected virtual Task PostPhase(long phase)
Parameters
Type | Name | Description |
---|---|---|
Int64 | phase | The current phase number. |
Returns
Type | Description |
---|---|
Task | A task representing post-phase asynchronous execution. |
RemoveParticipant()
Notifies this barrier that there will be one less participant.
Declaration
public void RemoveParticipant()
Remarks
This method may resume all tasks suspended by WaitAsync(TimeSpan, CancellationToken) and SignalAndWaitAsync(TimeSpan, CancellationToken) methods.
Exceptions
Type | Condition |
---|---|
ObjectDisposedException | The current instance has already been disposed. |
RemoveParticipants(Int64)
Notifies this barrier that there will be fewer participants.
Declaration
public void RemoveParticipants(long participantCount)
Parameters
Type | Name | Description |
---|---|---|
Int64 | participantCount | The number of additional participants to remove from the barrier. |
Remarks
This method may resume all tasks suspended by WaitAsync(TimeSpan, CancellationToken) and SignalAndWaitAsync(TimeSpan, CancellationToken) methods.
Exceptions
Type | Condition |
---|---|
ArgumentOutOfRangeException |
|
ObjectDisposedException | The current instance has already been disposed. |
SignalAndWaitAsync()
Signals that a participant has reached the barrier and waits for all other participants to reach the barrier as well.
Declaration
public Task SignalAndWaitAsync()
Returns
Type | Description |
---|---|
Task | The task representing waiting operation. |
Exceptions
Type | Condition |
---|---|
ObjectDisposedException | The current instance has already been disposed. |
SignalAndWaitAsync(CancellationToken)
Signals that a participant has reached the barrier and waits for all other participants to reach the barrier as well.
Declaration
public Task SignalAndWaitAsync(CancellationToken token)
Parameters
Type | Name | Description |
---|---|---|
CancellationToken | token | The token that can be used to cancel the waiting operation. |
Returns
Type | Description |
---|---|
Task | The task representing waiting operation. |
Exceptions
Type | Condition |
---|---|
ObjectDisposedException | The current instance has already been disposed. |
SignalAndWaitAsync(TimeSpan, CancellationToken)
Signals that a participant has reached the barrier and waits for all other participants to reach the barrier as well.
Declaration
public Task<bool> SignalAndWaitAsync(TimeSpan timeout, CancellationToken token = default(CancellationToken))
Parameters
Type | Name | Description |
---|---|---|
TimeSpan | timeout | The time to wait for phase completion. |
CancellationToken | token | The token that can be used to cancel the waiting operation. |
Returns
Type | Description |
---|---|
Task<Boolean> | true if all other participants reached the barrier; otherwise, false. |
Exceptions
Type | Condition |
---|---|
ObjectDisposedException | The current instance has already been disposed. |
WaitAsync(TimeSpan, CancellationToken)
Waits for all other participants to reach the barrier.
Declaration
public Task<bool> WaitAsync(TimeSpan timeout, CancellationToken token)
Parameters
Type | Name | Description |
---|---|---|
TimeSpan | timeout | The time to wait for phase completion. |
CancellationToken | token | The token that can be used to cancel the waiting operation. |
Returns
Type | Description |
---|---|
Task<Boolean> | true if all other participants reached the barrier; otherwise, false. |
Explicit Interface Implementations
| Improve this Doc View SourceIAsyncEvent.IsSet
Declaration
bool IAsyncEvent.IsSet { get; }
Returns
Type | Description |
---|---|
Boolean |
IAsyncEvent.Reset()
Declaration
bool IAsyncEvent.Reset()
Returns
Type | Description |
---|---|
Boolean |
IAsyncEvent.Signal()
Declaration
bool IAsyncEvent.Signal()
Returns
Type | Description |
---|---|
Boolean |
ISynchronizer.HasWaiters
Declaration
bool ISynchronizer.HasWaiters { get; }
Returns
Type | Description |
---|---|
Boolean |