AsyncUpdateThrottle<T> Class
- Namespace
- Kampute.HttpClient.Utilities
- Assembly
- Kampute.HttpClient.dll
Definition
Manages thread-safe, asynchronous updates to a value, ensuring efficiency by reducing unnecessary update operations.
public sealed class AsyncUpdateThrottle<T> : IDisposable- Inheritance
- object
- AsyncUpdateThrottle<T>
- Implements
Type Parameters
T- The type of the value to be managed, preferably immutable for thread safety.
Remarks
This class provides a mechanism to update a value asynchronously while ensuring that updates are serialized and efficient. It is designed to prevent multiple, concurrent update operations from being processed if they are requested in quick succession. By employing a timing check before applying updates, the class ensures that only necessary updates proceed when the value has not been recently updated, making it ideal for scenarios where collecting or calculating the updated value is resource-intensive or costly.
Constructors
AsyncUpdateThrottle<T>()
Initializes a new instance of the AsyncUpdateThrottle<T> class with a default value.
public AsyncUpdateThrottle<T>()AsyncUpdateThrottle<T>(T)
Initializes a new instance of the AsyncUpdateThrottle<T> class with a specified value.
public AsyncUpdateThrottle<T>(T initialValue)Parameters
initialValueT- The initial value of the type
T.
Properties
LastUpdateTime
Gets the time of the last successful update operation.
public DateTimeOffset LastUpdateTime { get; }Property Value
- DateTimeOffset
- The time when the last successful update to the value was made. If no update has been applied, the value is DateTimeOffset.MinValue.
Value
Gets the current value.
public T Value { get; }Property Value
- T
- The current value of type
T. This value is thread-safe to access and represents the most recent state managed by the AsyncUpdateThrottle<T>.
Methods
Dispose()
Releases all resources used by the AsyncUpdateThrottle<T>.
public void Dispose()TryUpdateAsync(Func<Task<T>>, CancellationToken)
Attempts to update the value asynchronously using the provided updater function.
public Task<bool> TryUpdateAsync(Func<Task<T>> asyncUpdater, CancellationToken cancellationToken = default)Parameters
asyncUpdaterFunc<Task<T>>- The asynchronous function used to update the value.
cancellationTokenCancellationToken optional- A token for canceling the operation.
Returns
- Task<bool>
- A task that represents the asynchronous operation. The task result contains a boolean value that indicates whether the value was updated.
Exceptions
- ArgumentNullException
- Thrown if
asyncUpdaterisnull. - OperationCanceledException
- Thrown if the operation is canceled via the cancellation token.
Remarks
This method allows for a thread-safe update of the value. The update will only be applied if no other update has been completed since this update attempt was initiated, preventing unnecessary updates or overwrites by concurrent operations.
If the update proceeds and is successful, the method returns true; if another update has already been applied, it returns false. This behavior ensures that the value reflects the most recent update attempt that was actually needed.
