AsyncEnumerator 1.2.1
See the version list below for details.
dotnet add package AsyncEnumerator --version 1.2.1
NuGet\Install-Package AsyncEnumerator -Version 1.2.1
<PackageReference Include="AsyncEnumerator" Version="1.2.1" />
<PackageVersion Include="AsyncEnumerator" Version="1.2.1" />
<PackageReference Include="AsyncEnumerator" />
paket add AsyncEnumerator --version 1.2.1
#r "nuget: AsyncEnumerator, 1.2.1"
#:package AsyncEnumerator@1.2.1
#addin nuget:?package=AsyncEnumerator&version=1.2.1
#tool nuget:?package=AsyncEnumerator&version=1.2.1
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}");
  }
}
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET Framework | net is compatible. | 
This package has no dependencies.
NuGet packages (46)
Showing the top 5 NuGet packages that depend on AsyncEnumerator:
| Package | Downloads | 
|---|---|
| NBitcoin.Indexer Library for querying data indexed by NBitcoin.Indexer on Azure Storage | |
| Elect.Core Comprehensive collection of essential utilities and extension methods for .NET Core applications. Includes helpers for configuration, dependency injection, serialization, HTTP operations, and common programming patterns. | |
| Libplanet.Net A peer-to-peer networking layer based on Libplanet. | |
| Carbon.Kit Provides interfaces, abstractions and common functions which is the essence of Carbon Kit. | |
| Halforbit.RecordStreams Package Description | 
GitHub repositories (11)
Showing the top 11 popular GitHub repositories that depend on AsyncEnumerator:
| Repository | Stars | 
|---|---|
| Flangvik/TeamFiltration 
                                                            TeamFiltration is a cross-platform framework for enumerating, spraying, exfiltrating, and backdooring O365 AAD accounts
                                                         | |
| n00mkrad/text2image-gui 
                                                            Somewhat modular text2image GUI, initially just for Stable Diffusion
                                                         | |
| RevoLand/Steam-Library-Manager 
                                                            Open source utility to manage Steam, Origin and Uplay libraries in ease of use with multi library support. ||| Steam Games Database: https://stmstat.com
                                                         | |
| planetarium/libplanet 
                                                            Blockchain in C#/.NET for on-chain, decentralized gaming
                                                         | |
| fmbot-discord/fmbot 
                                                            .fmbot is a social Discord bot that provides music statistics for you and your friends.
                                                         | |
| Texnomic/SecureDNS 
                                                            Secure, Modern, Fully-Featured, All-In-One Cross-Architecture & Cross-Platform DNS Server Using .NET 8.0
                                                         | |
| rayshift/translatefgo 
                                                            FGO Translation Project
                                                         | |
| gregyjames/OctaneDownloader 
                                                            A high performance, multi-threaded C# file download library.
                                                         | |
| Dasync/Dasync 
                                                            Every developer deserves the right of creating microservices without using any framework 🤍
                                                         | |
| topnguyen/Elect 
                                                            The collection of utilities, best practice and fluent method for .NET Core
                                                         | |
| MightyOrm/Mighty 
                                                            A new, small, dynamic micro-ORM. Highly compatible with Massive, but with many essential new features.
                                                         | 
| Version | Downloads | Last Updated | 
|---|---|---|
| 4.0.2 | 20,179,911 | 12/4/2019 | 
| 4.0.1 | 201,008 | 10/22/2019 | 
| 4.0.0 | 48,082 | 10/18/2019 | 
| 3.1.0 | 154,542 | 9/23/2019 | 
| 2.2.2 | 2,471,153 | 1/27/2019 | 
| 2.2.1 | 1,537,046 | 5/29/2018 | 
| 2.2.0 | 53,038 | 5/18/2018 | 
| 2.1.1 | 2,011,555 | 1/20/2018 | 
| 2.1.0 | 345,543 | 5/22/2017 | 
| 2.0.1 | 64,514 | 2/13/2017 | 
| 1.5.0 | 6,847 | 2/12/2017 | 
| 1.4.2 | 4,449 | 2/6/2017 | 
| 1.3.0 | 4,585 | 1/20/2017 | 
| 1.2.3 | 14,092 | 1/6/2017 | 
| 1.2.2 | 5,152 | 12/11/2016 | 
| 1.2.1 | 3,618 | 12/10/2016 | 
| 1.2.0 | 22,948 | 11/29/2016 | 
| 1.1.3 | 3,927 | 11/28/2016 | 
| 1.1.2 | 52,580 | 8/29/2016 | 
| 1.0.3 | 7,059 | 4/28/2016 | 
New Linq-style extension methods in System.Collections.Async namespace