Info
Version: | 4.0.2 |
Author(s): | sergiis, dasync |
Last Update: | Wednesday, December 4, 2019 |
.NET Fiddle: | Create the first Fiddle |
Project Url: | https://github.com/Dasync/AsyncEnumerable |
NuGet Url: | https://www.nuget.org/packages/AsyncEnumerator |
Install
Install-Package AsyncEnumerator
dotnet add package AsyncEnumerator
paket add AsyncEnumerator
AsyncEnumerator Download (Unzip the "nupkg" after downloading)
Dependencies
.NETFramework 4.5
- System.Threading.Tasks.Extensions(>= 4.5.0)
- Microsoft.Bcl.AsyncInterfaces(>= 1.0.0)
- System.Threading.Tasks.Extensions(>= 4.5.2)
- Microsoft.Bcl.AsyncInterfaces(>= 1.0.0)
- System.Threading.Tasks.Extensions(>= 4.5.2)
- System.Threading.Tasks.Extensions(>= 4.5.0)
No dependencies.
Tags
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 Dasync.Collections;
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}");
}
}.