Class AsyncBarrier
Enables multiple tasks to cooperatively work on an algorithm in parallel through multiple phases.
Inherited Members
Namespace: DotNext.Threading
Assembly: DotNext.Threading.dll
Syntax
public class AsyncBarrier : Disposable, IAsyncEvent, IDisposable, IResettable
Remarks
This is asynchronous version of Barrier with small differences:
- Post-phase action is presented by virtual method PostPhase(long).
- It is 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 long data type.
Constructors
| Edit this page View SourceAsyncBarrier(long)
Initializes a new Barrier withe given number of participating tasks.
Declaration
public AsyncBarrier(long participantCount)
Parameters
| Type | Name | Description |
|---|---|---|
| long | participantCount | The number of participating tasks. |
Exceptions
| Type | Condition |
|---|---|
| ArgumentOutOfRangeException |
|
Properties
| Edit this page View SourceCurrentPhaseNumber
Gets the number of the barrier's current phase.
Declaration
public long CurrentPhaseNumber { get; }
Property Value
| Type | Description |
|---|---|
| long |
ParticipantCount
Gets the total number of participants in the barrier.
Declaration
public long ParticipantCount { get; }
Property Value
| Type | Description |
|---|---|
| long |
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 |
|---|---|
| long |
Methods
| Edit this page View SourceAddParticipant()
Notifies this barrier that there will be additional participant.
Declaration
public long AddParticipant()
Returns
| Type | Description |
|---|---|
| long | 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(long)
Notifies this barrier that there will be additional participants.
Declaration
public long AddParticipants(long participantCount)
Parameters
| Type | Name | Description |
|---|---|---|
| long | participantCount | The number of additional participants to add to the barrier. |
Returns
| Type | Description |
|---|---|
| long | 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(bool)
Releases managed and unmanaged resources associated with this object.
Declaration
protected override void Dispose(bool disposing)
Parameters
| Type | Name | Description |
|---|---|---|
| bool | disposing | true if called from Dispose(); false if called from finalizer ~Disposable(). |
Overrides
| Edit this page View SourceDisposeAsyncCore()
Releases managed resources associated with this object asynchronously.
Declaration
protected override ValueTask DisposeAsyncCore()
Returns
| Type | Description |
|---|---|
| ValueTask | The task representing asynchronous execution of this method. |
Overrides
Remarks
This method makes sense only if derived class implements IAsyncDisposable interface.
PostPhase(long)
The action to be executed after each phase.
Declaration
protected virtual ValueTask PostPhase(long phase)
Parameters
| Type | Name | Description |
|---|---|---|
| long | phase | The current phase number. |
Returns
| Type | Description |
|---|---|
| ValueTask | 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(long)
Notifies this barrier that there will be fewer participants.
Declaration
public void RemoveParticipants(long participantCount)
Parameters
| Type | Name | Description |
|---|---|---|
| long | 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(CancellationToken)
Signals that a participant has reached the barrier and waits for all other participants to reach the barrier as well.
Declaration
public ValueTask SignalAndWaitAsync(CancellationToken token = default)
Parameters
| Type | Name | Description |
|---|---|---|
| CancellationToken | token | The token that can be used to cancel the waiting operation. |
Returns
| Type | Description |
|---|---|
| ValueTask | The task representing waiting operation. |
Exceptions
| Type | Condition |
|---|---|
| ObjectDisposedException | The current instance has already been disposed. |
| BarrierPostPhaseException | PostPhase(long) fails. |
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 ValueTask<bool> SignalAndWaitAsync(TimeSpan timeout, CancellationToken token = default)
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 |
|---|---|
| ValueTask<bool> | true if all other participants reached the barrier; otherwise, false. |
Exceptions
| Type | Condition |
|---|---|
| ObjectDisposedException | The current instance has already been disposed. |
| BarrierPostPhaseException | PostPhase(long) fails. |
WaitAsync(CancellationToken)
Waits for all other participants to reach the barrier.
Declaration
public ValueTask WaitAsync(CancellationToken token = default)
Parameters
| Type | Name | Description |
|---|---|---|
| CancellationToken | token | The token that can be used to cancel the waiting operation. |
Returns
| Type | Description |
|---|---|
| ValueTask | The task representing asynchronous result. |
Exceptions
| Type | Condition |
|---|---|
| ObjectDisposedException | The current instance has already been disposed. |
| OperationCanceledException | The operation has been canceled. |
WaitAsync(TimeSpan, CancellationToken)
Waits for all other participants to reach the barrier.
Declaration
public ValueTask<bool> WaitAsync(TimeSpan timeout, CancellationToken token = default)
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 |
|---|---|
| ValueTask<bool> | true if all other participants reached the barrier; otherwise, false. |
Exceptions
| Type | Condition |
|---|---|
| ObjectDisposedException | The current instance has already been disposed. |
| OperationCanceledException | The operation has been canceled. |