UtilPack.AsyncEnumeration 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package UtilPack.AsyncEnumeration --version 1.0.0                
NuGet\Install-Package UtilPack.AsyncEnumeration -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="UtilPack.AsyncEnumeration" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add UtilPack.AsyncEnumeration --version 1.0.0                
#r "nuget: UtilPack.AsyncEnumeration, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install UtilPack.AsyncEnumeration as a Cake Addin
#addin nuget:?package=UtilPack.AsyncEnumeration&version=1.0.0

// Install UtilPack.AsyncEnumeration as a Cake Tool
#tool nuget:?package=UtilPack.AsyncEnumeration&version=1.0.0                

UtilPack.AsyncEnumeration

While async enumerables are still incoming (old link: https://github.com/dotnet/roslyn/issues/261), this project aims to provide API to work with async enumerables. In the context of this project, async enumerables may be e.g. results of SQL query, or a collection of objects deserialized from e.g. network stream. The link above seems to discuss also about scenarios like sending query syntax tree of the code enumerating async enumerable to server, which will evaluate it, but this kind of asynchrony is out of the scope of this project.

The best way to start is UtilPack.AsyncEnumeration.AsyncEnumerationFactory class. As the name suggests, it can be used to create classes implementing various IAsyncEnumerable<T> and IAsyncEnumerator<T> interfaces. Just like the synchronous System.Collections.Generic.IEnumerator<T> interface, the enumerator starts with being positioned just before first element.

IAsyncEnumerable

This is just like its synchronous counterpart IEnumerable<T> interface, except for asynchronous environment. One should use EnumerateSequentiallyAsync extension method to enumerate the items of IAsyncEnumerable<T>.

aLINQ

This library also provides a number of methods that correspond to the ones available as LINQ methods to normal IEnumerable<T> interface. These methods accept both synchronous and asynchronous calllbacks.

IAsyncConcurrentEnumerable

This interface extends IAsyncEnumerable<T> in order to allow concurrent enumeration of its items. The IAsyncConcurrentEnumerable may still be enumerated sequentially, but it may also be enumerated concurrently by EnumerateConcurrentlyAsync extension method.

Observability

Both IAsyncEnumerable<T> and IAsyncConcurrentEnumerable<T> may also be converted to their observable counterparts using AsObservable extension methods. The extension methods make sure not to wrap too many items.

The observable events are listed below.

  • The BeforeEnumerationStart event occurs just before starting enumeration in initial WaitForNextAsync call.
  • The AfterEnumerationStart event occurs just after starting enumeration in initial WaitForNextAsync call.
  • The AfterEnumerationItemEncountered event occurs just after next item is successfully fetched by TryGetNext call.
  • The BeforeEnumerationEnd event occurs just before Dispose call.
  • The AfterEnumerationEnd events occurs just after Dispose call.

Distribution

See NuGet package for binary distribution.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp1.0 was computed.  netcoreapp1.1 was computed.  netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard1.0 is compatible.  netstandard1.1 is compatible.  netstandard1.2 was computed.  netstandard1.3 was computed.  netstandard1.4 was computed.  netstandard1.5 was computed.  netstandard1.6 was computed.  netstandard2.0 was computed.  netstandard2.1 was computed. 
.NET Framework net40 is compatible.  net403 was computed.  net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen30 was computed.  tizen40 was computed.  tizen60 was computed. 
Universal Windows Platform uap was computed.  uap10.0 was computed. 
Windows Phone wp8 was computed.  wp81 was computed.  wpa81 was computed. 
Windows Store netcore was computed.  netcore45 was computed.  netcore451 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on UtilPack.AsyncEnumeration:

Package Downloads
CBAM.Abstractions

The Connection-Based Asynchronous Messaging (CBAM) Abstractions assembly contains types which are common for any workflow which communicates with e.g. SQL or LDAP processes using some kind of IPC connection.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 1,097 6/21/2018
1.0.0 12,291 5/26/2018
1.0.0-RC6 3,683 10/29/2017
1.0.0-RC5 697 10/18/2017
1.0.0-RC4 3,329 9/21/2017
1.0.0-RC2 3,282 8/17/2017
1.0.0-RC1 832 7/25/2017

Added new aLINQ methods: Take, TakeWhile, Skip, SkipWhile, Aggregate, SelectMany. Added also generation classes.