AsyncEnumerator 2.2.0
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()
{
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.
|
2 |
DotNetCore.CAP.InMemoryStorage
Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern.
|
3 |
DotNetCore.CAP.InMemoryStorage
Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern.
|
4 |
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.
|
4 |
DotNetCore.CAP.InMemoryStorage
EventBus outbox integration and eventually consistency in microservice architectures.
|
5 |
2.2.0: New extension methods: SelectMany, Append, Prepend, OfType, Concat, Distinct, ToDictionaryAsync, ToLookupAsync, AggregateAsync.
2.1.0: New extension methods: Batch, UnionAll, Single, SingleOrDefault, DefaultIfEmpty, Cast.
2.0.0: Revise design of the library: same features, but slight paradigm shift and interface breaking changes.
1.5.0: Add support for .NET Standard, minor improvements.
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.2.1: New Linq-style extension methods in System.Collections.Async namespace.
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 | 6 | 05/28/2024 |
4.0.1 | 2 | 05/28/2024 |
4.0.0 | 3 | 05/28/2024 |
3.1.0 | 6 | 05/28/2024 |
2.2.2 | 1 | 05/28/2024 |
2.2.1 | 3 | 05/28/2024 |
2.2.0 | 6 | 05/28/2024 |
2.1.1 | 3 | 05/28/2024 |
2.1.0 | 6 | 05/28/2024 |
2.0.1 | 3 | 05/28/2024 |
1.5.0 | 3 | 05/28/2024 |
1.4.2 | 3 | 05/28/2024 |
1.3.0 | 3 | 05/28/2024 |
1.2.3 | 5 | 05/28/2024 |
1.2.2 | 5 | 05/28/2024 |
1.2.1 | 3 | 05/28/2024 |
1.2.0 | 3 | 05/28/2024 |
1.1.3 | 3 | 05/28/2024 |
1.1.2 | 4 | 05/28/2024 |
1.0.3 | 7 | 05/28/2024 |