dotnet/reactive · error · ArgumentNullException
Value cannot be null. (Parameter 'factory')
Error message
Value cannot be null. (Parameter 'factory')
What it means
This TaskPoolAsyncScheduler constructor overload takes an explicit TaskFactory that controls task creation options; null is rejected because scheduling depends on it. Fix: supply a real TaskFactory (e.g. new TaskFactory(scheduler)) or use the TaskScheduler-based overload.
Solutions
- Supply a valid TaskFactory/TaskScheduler when constructing the scheduler.
- Use TaskPoolAsyncScheduler.Default rather than constructing with null arguments.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at AsyncRx.NET/System.Reactive.Async/Concurrency/TaskPoolAsyncScheduler.cs:27 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/30d3e18b39e21fdc.
Report an issue: GitHub.
Appendix: source
Thrown at AsyncRx.NET/System.Reactive.Async/Concurrency/TaskPoolAsyncScheduler.cs:27
{
public sealed class TaskPoolAsyncScheduler : AsyncSchedulerBase
{
private readonly TaskFactory _factory;
public static TaskPoolAsyncScheduler Current { get; } = new TaskPoolAsyncScheduler(TaskScheduler.Current);
public static TaskPoolAsyncScheduler Default { get; } = new TaskPoolAsyncScheduler(TaskScheduler.Default);
public TaskPoolAsyncScheduler(TaskScheduler scheduler)
{
if (scheduler == null)
throw new ArgumentNullException(nameof(scheduler));
_factory = new TaskFactory(scheduler);
}
public TaskPoolAsyncScheduler(TaskFactory factory)
{
_factory = factory ?? throw new ArgumentNullException(nameof(factory));
}
protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new(Task.Delay(dueTime, token));
protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token)
{
var task = _factory.StartNew(() => action(token).AsTask(), token);
task.Unwrap().ContinueWith(t =>
{
if (!t.IsCanceled && t.Exception != null)
{
// TODO: Call event handler.
}
});
return default;
}View on GitHub (pinned to 94b5d5ab91)