AsyncEnumerator 2.1.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}");
 }
}

There is a newer version of this package available.
See the version list below for details.
Install-Package AsyncEnumerator -Version 2.1.0
dotnet add package AsyncEnumerator --version 2.1.0
paket add AsyncEnumerator --version 2.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Release Notes

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.

Dependencies

This package has no dependencies.

Version History

Version Downloads Last updated
3.0.2-beta 107 4/9/2019
3.0.0-beta1 1,706 2/23/2019
2.2.2 29,282 1/27/2019
2.2.1 250,584 5/29/2018
2.2.0 8,743 5/18/2018
2.1.1 63,111 1/20/2018
2.1.0 128,758 5/22/2017
2.0.1 39,748 2/13/2017
1.5.0 2,666 2/12/2017
1.4.2 942 2/6/2017
1.3.0 1,220 1/20/2017
1.2.3 6,241 1/6/2017
1.2.2 1,053 12/11/2016
1.2.1 295 12/10/2016
1.2.0 8,339 11/29/2016
1.1.3 307 11/28/2016
1.1.2 13,090 8/29/2016
1.0.3 1,539 4/28/2016
Show less