AsyncEnumerator 1.4.2

Introduces IAsyncEnumerable, IAsyncEnumerator, ForEachAsync(), and ParallelForEachAsync() GitHub: https://github.com/tyrotoxin/AsyncEnumerable PROBLEM SPACE Helps to (a) create an element provider, where producing an element can take a lot of time due to dependency on other asynchronous events (e.g. wait handles, network streams), and (b) a consumer that processes those element as soon as they are ready without blocking the thread (the processing is scheduled on a worker thread instead). EXAMPLE using System.Collections.Async; static IAsyncEnumerable<int> ProduceAsyncNumbers(int start, int end) { return new AsyncEnumerable<int>(async yield => { // Just to show that ReturnAsync can be used multiple times await yield.ReturnAsync(start); for (int number = start + 1; number <= end; number++) await yield.ReturnAsync(number); // You can break the enumeration loop with the following call: yield.Break(); // This won't be executed due to the loop break above await yield.ReturnAsync(12345); }); } // Just to compare with synchronous version of enumerator static IEnumerable<int> ProduceNumbers(int start, int end) { yield return start; for (int number = start + 1; number <= end; number++) yield return number; yield break; yield return 12345; } static async Task ConsumeNumbersAsync() { var asyncEnumerableCollection = ProduceAsyncNumbers(start: 1, end: 10); await asyncEnumerableCollection.ForEachAsync(async number => { await Console.Out.WriteLineAsync($"{number}"); }); } // Just to compare with synchronous version of enumeration static void ConsumeNumbers() { // NOTE: IAsyncEnumerable is derived from IEnumerable, so you can use either var enumerableCollection = ProduceAsyncNumbers(start: 1, end: 10); //var enumerableCollection = ProduceNumbers(start: 1, end: 10); foreach (var number in enumerableCollection) { Console.Out.WriteLine($"{number}"); } }

Showing the top 20 packages that depend on AsyncEnumerator.

Packages Downloads
DotNetCore.CAP.InMemoryStorage
Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern.
1
DotNetCore.CAP.InMemoryStorage
Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern.
2
DotNetCore.CAP.InMemoryStorage
EventBus outbox integration and eventually consistency in microservice architectures.
1
DotNetCore.CAP.InMemoryStorage
EventBus outbox integration and eventually consistency in microservice architectures.
2
DotNetCore.CAP.InMemoryStorage
EventBus outbox integration and eventually consistency in microservice architectures.
3
DotNetCore.CAP.InMemoryStorage
EventBus outbox integration and eventually consistency in microservice architectures.
4

1.4.2: Add finalizer to AsyncEnumerator and call Dispose in ForEachAsync and ParallelForEachAsync extension methods. 1.4.0: Add new generic type AsyncEnumeratorWithState for performance optimization. Now IAsyncEnumerator<T> is covariant. Add ForEachAsync, ParallelForeachAsync, and LINQ-style extension methods for IAsyncEnumerator. 1.3.0: Significantly improve performance of AsyncEnumerator by reducing thread switching and re-using instances of TaskCompletionSource. Add support for a state object that can be passed into AsyncEnumerable and AsyncEnumerator for performance optimization. Remove CancellationToken from Select/Take/Skip/Where extension methods - fix improper implementation. Move AsyncEnumerationCanceledException out of the generic AsyncEnumerator type. Change default behavior of the ToAsyncEnumerable extension method - now MoveNextAsync will run synchronously by default. 1.2.3: AsyncEnumerationCanceledException is thrown to the async enumeration function when the AsyncEnumerator is disposed before reaching the end of enumeration, what allows to do the clean-up. Fixed MoveNextAsync() that threw an exception sometimes only when you passed the end of enumeration. 1.2.2: Fix exception propagation in AsyncEnumerator. 1.2.1: New Linq-style extension methods in System.Collections.Async namespace. 1.2.0: Contract breaking changes in ParallelForEachAsync: introduce ParallelForEachException to unify error outcome of the loop. 1.1.0: Add ParallelForEachAsync extension methods for IEnumerable<T> and IAsyncEnumerable<T> in System.Collections.Async namespace.

This package has no dependencies.

Version Downloads Last updated
4.0.2 4 05/28/2024
4.0.1 1 05/28/2024
4.0.0 2 05/28/2024
3.1.0 4 05/28/2024
2.2.2 1 05/28/2024
2.2.1 2 05/28/2024
2.2.0 5 05/28/2024
2.1.1 1 05/28/2024
2.1.0 4 05/28/2024
2.0.1 3 05/28/2024
1.5.0 2 05/28/2024
1.4.2 3 05/28/2024
1.3.0 2 05/28/2024
1.2.3 4 05/28/2024
1.2.2 3 05/28/2024
1.2.1 2 05/28/2024
1.2.0 3 05/28/2024
1.1.3 2 05/28/2024
1.1.2 4 05/28/2024
1.0.3 5 05/28/2024