dotnet/reactive · error · ArgumentNullException
collectionSelector
Error message
collectionSelector
What it means
In the three-argument SelectMany overload, collectionSelector produces the inner observables; null is rejected because the per-element expansion cannot be computed. Fix: pass a non-null Func<TSource, IAsyncObservable<TCollection>>.
Solutions
- Pass a non-null Func<TSource, IAsyncObservable<TCollection>>.
- Flatten to the two-type-parameter SelectMany if only one projection is needed.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at AsyncRx.NET/System.Reactive.Async/Linq/Operators/SelectMany.cs:58 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of dotnet/reactive@94b5d5ab91 (2026-09-15).
Data as JSON: /api/errors/2f859e7931bdf8d5.
Report an issue: GitHub.
Appendix: source
Thrown at AsyncRx.NET/System.Reactive.Async/Linq/Operators/SelectMany.cs:58
return CreateAsyncObservable<TResult>.From(
source,
selector,
static async (source, selector, observer) =>
{
var (sink, inner) = AsyncObserver.SelectMany(observer, selector);
var subscription = await source.SubscribeSafeAsync(sink).ConfigureAwait(false);
return StableCompositeAsyncDisposable.Create(subscription, inner);
});
}
public static IAsyncObservable<TResult> SelectMany<TSource, TCollection, TResult>(this IAsyncObservable<TSource> source, Func<TSource, IAsyncObservable<TCollection>> collectionSelector, Func<TSource, TCollection, TResult> resultSelector)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
if (collectionSelector == null)
throw new ArgumentNullException(nameof(collectionSelector));
if (resultSelector == null)
throw new ArgumentNullException(nameof(resultSelector));
return CreateAsyncObservable<TResult>.From(
source,
(collectionSelector, resultSelector),
static async (source, state, observer) =>
{
var (sink, inner) = AsyncObserver.SelectMany(observer, state.collectionSelector, state.resultSelector);
var subscription = await source.SubscribeSafeAsync(sink).ConfigureAwait(false);
return StableCompositeAsyncDisposable.Create(subscription, inner);
});
}
public static IAsyncObservable<TResult> SelectMany<TSource, TCollection, TResult>(this IAsyncObservable<TSource> source, Func<TSource, ValueTask<IAsyncObservable<TCollection>>> collectionSelector, Func<TSource, TCollection, ValueTask<TResult>> resultSelector)
{View on GitHub (pinned to 94b5d5ab91)