<PackageReference Include="AsyncEnumerator" Version="2.2.0" />

System.Collections.Async.AsyncEnumerableWithState<TItem, TState>

Similar to AsyncEnumerable<T>, but allows you to pass a state object into the enumeration function, what can be used for performance optimization, so don't have to create a delegate on the fly every single time you create the enumerator.
namespace System.Collections.Async { public class AsyncEnumerableWithState<TItem, TState> : AsyncEnumerable, IAsyncEnumerable<TItem>, IAsyncEnumerable { protected TState State { get; } public AsyncEnumerableWithState(Func<AsyncEnumerator<TItem>.Yield, TState, Task> enumerationFunction, TState state); public virtual Task<IAsyncEnumerator<TItem>> GetAsyncEnumeratorAsync(CancellationToken cancellationToken = default(CancellationToken)); } }