Shane32.AsyncResetEvents
3.1.0
See the version list below for details.
dotnet add package Shane32.AsyncResetEvents --version 3.1.0
NuGet\Install-Package Shane32.AsyncResetEvents -Version 3.1.0
<PackageReference Include="Shane32.AsyncResetEvents" Version="3.1.0" />
paket add Shane32.AsyncResetEvents --version 3.1.0
#r "nuget: Shane32.AsyncResetEvents, 3.1.0"
// Install Shane32.AsyncResetEvents as a Cake Addin #addin nuget:?package=Shane32.AsyncResetEvents&version=3.1.0 // Install Shane32.AsyncResetEvents as a Cake Tool #tool nuget:?package=Shane32.AsyncResetEvents&version=3.1.0
Shane32.AsyncResetEvents
AsyncAutoResetEvent
The methods match similar methods on AutoResetEvent
:
void Set(bool backgroundThread = false)
Task WaitAsync(CancellationToken cancellationToken = default)
Task<bool> WaitAsync(int millisecondsTimeout, CancellationToken cancellationToken = default)
Task<bool> WaitAsync(TimeSpan timeout, CancellationToken cancellationToken = default)
Calling Set
will execute waiting task continuation functions on the same thread by default.
Setting the backgroundThread
parameter will schedule them through the task scheduler.
WaitAsync
supports a timeout and cancellation token. If the cancellation token is triggered
before the reset event is signaled, a OperationCanceledException
is throw. If the timeout
occurs, false
is returned. If the reset event is signaled, true
is returned.
As an automatic reset event, calling WaitAsync
will reset the signal. Note that a queue
is maintained, and calling Set
will only allow a single waiting task continuation function
to execute. If no task continuation functions are waiting, calling Set
one or more times
will allow only the next call to WaitAsync
to execute. Additional calls to WaitAsync
will wait for an additional call to Set
.
AsyncManualResetEvent
The methods are identical to above, with the addition of the Reset
method.
void Set(bool backgroundThread = false)
void Reset()
Task WaitAsync(CancellationToken cancellationToken = default)
Task<bool> WaitAsync(int millisecondsTimeout, CancellationToken cancellationToken = default)
Task<bool> WaitAsync(TimeSpan timeout, CancellationToken cancellationToken = default)
As a manual reset event, calling WaitAsync
will wait until the event is signaled.
Signaling the event with Set
will result in the event staying signaled until Reset
is
called. As such, you may call WaitAsync
any number of times on a signaled event and
execution will continue. If the reset event is not signaled, you may call WaitAsync
any
number of times and they will all wait until Set
is called before executing.
AsyncMessagePump
Synchronizes execution of a sequence of asynchronous tasks. This maintains execution order
while allowing tasks to be posted asynchronously to the queue. The callback delegate may
be an asynchronous or synchronous delegate. Messages may be posted directly or an
asynchronous operation that returns a message may be posted to the queue. Regardless,
execution order is maintained as of the point in time that Post
was called, and
the callback is never run on multiple threads at once. If an asynchronous operation
was posted and it throws an exception, or if the callback throws an exception, the exception
is handled by the HandleErrorAsync
protected method, which can be overridden by a user in
a derived class. DrainAsync
is provided to wait for pending messages to be processed.
Note that the ExecutionContext is captured during the Post
call and restored while the
callback (and/or the error handler) is executed.
Constructors:
AsyncMessagePump(Func<T, Task> callback)
AsyncMessagePump(Action<T> callback)
Public methods:
void Post(T message)
void Post(Task<T> messageTask)
Task DrainAsync()
Public properties:
int Count { get; }
Protected methods:
Task HandleErrorAsync(Exception exception)
AsyncDelegatePump
Synchronizes executes of asynchronous delegates. Queued delegates executes in the order
that they were queued with a call to Post
. This class is derived from AsyncMessagePump
;
see above for further details. Also included is SendAsync
, which will queue an asynchronous
delegate and return its result after it executes (in its turn). Any further code after
awaiting a Task
returned by SendAsync
will not prevent additional delegates in the queue
from executing. SendAsync
also accepts an optional timeout and cancellation token parameter.
If the timeout expires before the delegate is executed, a TimeoutException
is thrown and the
delegate is not executed. Similarly, if the cancellation token is triggered before the delegate
is executed, a OperationCanceledException
is thrown and the delegate is not executed.
Note that the ExecutionContext is captured during the call to SendAsync
and restored while
the delegate is executed.
Public methods:
void Post(Func<Task> message)
Task SendAsync(Func<Task> action)
Task SendAsync(Func<Task> action, CancellationToken token)
Task SendAsync(Func<Task> action, TimeSpan timeout, CancellationToken token = default)
Task<T> SendAsync<T>(Func<Task<T>> action)
Task<T> SendAsync<T>(Func<Task<T>> action, CancellationToken token)
Task<T> SendAsync<T>(Func<Task<T>> action, TimeSpan timeout, CancellationToken token = default)
Task DrainAsync()
Public properties:
int Count { get; }
Protected methods:
Task HandleErrorAsync(Exception exception)
(not needed whenSendAsync
is used)
Credits
Glory to Jehovah, Lord of Lords and King of Kings, creator of Heaven and Earth, who through his Son Jesus Christ, has reedemed me to become a child of God. -Shane32
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.0 is compatible. netstandard1.1 was computed. netstandard1.2 was computed. netstandard1.3 is compatible. netstandard1.4 was computed. netstandard1.5 was computed. netstandard1.6 was computed. netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net45 was computed. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Universal Windows Platform | uap was computed. uap10.0 was computed. |
Windows Phone | wp8 was computed. wp81 was computed. wpa81 was computed. |
Windows Store | netcore was computed. netcore45 was computed. netcore451 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 1.0
- NETStandard.Library (>= 1.6.1)
-
.NETStandard 1.3
- NETStandard.Library (>= 1.6.1)
-
.NETStandard 2.0
- No dependencies.
-
.NETStandard 2.1
- No dependencies.
-
net5.0
- No dependencies.
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.