using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace ZeroLevel.Services.Async { /// /// Represents a thread-safe collection that allows asynchronous consuming. /// /// The type of the items contained in the collection. public interface IAsyncCollection : IReadOnlyCollection { /// /// Gets an amount of pending item requests. /// int AwaiterCount { get; } /// /// Adds an item to the collection. /// /// The item to add to the collection. void Add(T item); /// /// Removes and returns an item from the collection in an asynchronous manner. /// ValueTask TakeAsync(CancellationToken cancellationToken); } public static class AsyncCollectionExtensions { /// /// Removes and returns an item from the collection in an asynchronous manner. /// public static ValueTask TakeAsync(this IAsyncCollection collection) { return collection.TakeAsync(CancellationToken.None); } } }