Gapotchenko.FX.Linq.Async
2026.7.2
Prefix Reserved
dotnet add package Gapotchenko.FX.Linq.Async --version 2026.7.2
NuGet\Install-Package Gapotchenko.FX.Linq.Async -Version 2026.7.2
<PackageReference Include="Gapotchenko.FX.Linq.Async" Version="2026.7.2" />
<PackageVersion Include="Gapotchenko.FX.Linq.Async" Version="2026.7.2" />
<PackageReference Include="Gapotchenko.FX.Linq.Async" />
paket add Gapotchenko.FX.Linq.Async --version 2026.7.2
#r "nuget: Gapotchenko.FX.Linq.Async, 2026.7.2"
#:package Gapotchenko.FX.Linq.Async@2026.7.2
#addin nuget:?package=Gapotchenko.FX.Linq.Async&version=2026.7.2
#tool nuget:?package=Gapotchenko.FX.Linq.Async&version=2026.7.2
Overview
The module provides asynchronous LINQ extensions and utilities for working with IAsyncEnumerable<T> sequences, including bridging between synchronous and asynchronous enumeration models.
AsyncEnumerableBridge
AsyncEnumerableBridge static class provides methods to bridge synchronous and asynchronous enumeration models together, allowing seamless conversion between IEnumerable<T> and IAsyncEnumerable<T>.
Converting Asynchronous Enumerable to Synchronous
You can synchronously enumerate values from an asynchronous source:
using Gapotchenko.FX.Linq;
IAsyncEnumerable<string> asyncSource = GetAsyncStrings();
// Synchronously enumerate from async source
foreach (string item in AsyncEnumerableBridge.Enumerate(asyncSource))
Console.WriteLine(item);
Converting Synchronous Enumerable to Asynchoronous
You can asynchronously enumerate values from a synchronous source:
using Gapotchenko.FX.Linq;
IEnumerable<string> syncSource = GetStrings();
// Asynchronously enumerate from sync source
await foreach (string item in AsyncEnumerableBridge.EnumerateAsync(syncSource))
Console.WriteLine(item);
// With cancellation support
var cancellationToken = ...;
await foreach (string item in AsyncEnumerableBridge.EnumerateAsync(syncSource, cancellationToken))
Console.WriteLine(item);
When cancellation is requested, the thread executing the synchronous enumeration is terminated.
ScalarOrDefaultAsync
The ScalarOrDefaultAsync() extension method provides safe scalar extraction from asynchronous sequences. Unlike SingleOrDefaultAsync() from conventional .NET, it does not throw an exception when a sequence contains multiple elements.
The method follows the same safe semantics as ScalarOrDefault() from Gapotchenko.FX.Linq:
- Returns the element if the sequence contains exactly one element
- Returns the default value if the sequence is empty
- Returns the default value if the sequence contains multiple elements
This allows you to safely determine whether a given asynchronous query converges to a scalar result without exception handling.
Related Modules
- Gapotchenko.FX.Linq - Provides synchronous LINQ extensions and primitives
- Gapotchenko.FX.Threading - Provides threading primitives, including bridging between synchronous and asynchronous execution models
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
- Gapotchenko.FX.Tuples
- Gapotchenko.FX.Versioning
Or look at the full list of modules.
| Product | Versions 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 is compatible. 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. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7.2
- Gapotchenko.FX (>= 2026.7.2)
- Gapotchenko.FX.Threading (>= 2026.7.2)
- System.Linq.AsyncEnumerable (>= 10.0.5)
-
.NETStandard 2.0
- Gapotchenko.FX (>= 2026.7.2)
- Gapotchenko.FX.Threading (>= 2026.7.2)
- System.Linq.AsyncEnumerable (>= 10.0.5)
-
.NETStandard 2.1
- Gapotchenko.FX (>= 2026.7.2)
- Gapotchenko.FX.Threading (>= 2026.7.2)
- System.Linq.AsyncEnumerable (>= 10.0.5)
-
net10.0
- Gapotchenko.FX (>= 2026.7.2)
- Gapotchenko.FX.Threading (>= 2026.7.2)
-
net8.0
- Gapotchenko.FX (>= 2026.7.2)
- Gapotchenko.FX.Threading (>= 2026.7.2)
- System.Linq.AsyncEnumerable (>= 10.0.5)
-
net9.0
- Gapotchenko.FX (>= 2026.7.2)
- Gapotchenko.FX.Threading (>= 2026.7.2)
- System.Linq.AsyncEnumerable (>= 10.0.5)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Gapotchenko.FX.Linq.Async:
| Package | Downloads |
|---|---|
|
Gapotchenko.FX.IO.Vfs
Provides a virtual file system (VFS) abstraction layer that enables uniform access to different file storage backends, including local file systems, archives, and custom storage formats. |
GitHub repositories
This package is not used by any popular GitHub repositories.