C# Async Streams features

Introduces IAsyncEnumerable, IAsyncEnumerator, ForEachAsync(), and ParallelForEachAsync()
GitHub: https://github.com/Dasync/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 ProduceAsyncNumbers(int start, int end)
{
return new AsyncEnumerable(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 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}");
}
}.

Info

Version: 2.2.1
Author(s): sergiis, Dasync
Last Update: Tuesday, May 29, 2018
.NET Fiddle:
Project Url: https://github.com/Dasync/AsyncEnumerable
NuGet Url: https://www.nuget.org/packages/AsyncEnumerator


Install
Install-Package AsyncEnumerator
dotnet add package Z.EntityFramework.Plus.EF6
paket add AsyncEnumerator
AsyncEnumerator Download (Unzip the "nupkg" after downloading)

2 packages depend on this package.


Tags



STATS

must-have-score

7

avg-downloads-per-day

205

days-since-last-release

19