{"record":{"id":"1967516b01127a7b","repo":"dotnet/reactive","slug":"the-scheduler-service-0-is-not-available","errorCode":null,"errorMessage":"The scheduler service '{0}' is not available.","messagePattern":"The scheduler service '(.+?)' is not available\\.","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"critical","filePath":"Rx.NET/Source/src/System.Reactive/Concurrency/Scheduler.cs","lineNumber":90,"sourceCode":"\n        /// <summary>\n        /// Gets a scheduler that schedules work on a new thread using default thread creation options.\n        /// </summary>\n        [Obsolete(Constants_Core.ObsoleteSchedulerNewthread)]\n        public static IScheduler NewThread => _newThread.Value;\n\n        private static readonly Lazy<IScheduler> _taskPool = new(static () => Initialize(\"TaskPool\"));\n\n        /// <summary>\n        /// Gets a scheduler that schedules work on Task Parallel Library (TPL) task pool using the default TaskScheduler.\n        /// </summary>\n        [Obsolete(Constants_Core.ObsoleteSchedulerTaskpool)]\n        public static IScheduler TaskPool => _taskPool.Value;\n\n        private static IScheduler Initialize(string name)\n        {\n            return PlatformEnlightenmentProvider.Current.GetService<IScheduler>(name)\n                ?? throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, Strings_Core.CANT_OBTAIN_SCHEDULER, name));\n        }\n    }\n}\n","sourceCodeStart":72,"sourceCodeEnd":94,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Concurrency/Scheduler.cs#L72-L94","documentation":"Scheduler.Initialize resolves an IScheduler from the platform enlightenment provider by service name; when the provider returns no implementation it throws NotSupportedException with 'The scheduler service \"{0}\" is not available.' This is how Scheduler.ThreadPool, NewThread and TaskPool lazily bind to the platform at first access.","triggerScenarios":"Accessing Scheduler.ThreadPool, Scheduler.NewThread or Scheduler.TaskPool in an environment where the platform enlightenment provider was not configured (e.g. custom PlatformEnlightenmentProvider without scheduler services, trimmed/AOT app missing the System.Reactive.PlatformServices registration).","commonSituations":"Replacing the default enlightenment provider with a custom one that omits IScheduler services; unit-test hosts that stub the provider; missing platform services package in some targets.","solutions":["Reference System.Reactive.PlatformServices so the default provider registers scheduler services","If using a custom PlatformEnlightenmentProvider, ensure GetService<IScheduler>(name) returns implementations for \"ThreadPool\", \"NewThread\", \"TaskPool\"","Use Scheduler.Default / immediate schedulers as a fallback instead of the missing service"],"exampleFix":"// before\nclass MyProvider : IPlatformEnlightenmentProvider\n{\n    public T GetService<T>(object[] args) where T : class => null; // scheduler services missing\n}\n// after\npublic T GetService<T>(object[] args) where T : class\n{\n    if (typeof(T) == typeof(IScheduler)) return new MyScheduler() as T;\n    return new DefaultPlatformEnlightenmentProvider().GetService<T>(args);\n}","handlingStrategy":"fallback","validationCode":"var sched = PlatformEnlightenmentProvider.Current.GetService<IScheduler>(\"ThreadPool\");\nif (sched == null) sched = new DefaultSchedulerShim();","typeGuard":"static bool SchedulerServiceAvailable<T>() where T : class => PlatformEnlightenmentProvider.Current.GetService<T>(\"ThreadPool\") != null;","tryCatchPattern":"try { sched = Scheduler.TaskPool; }\ncatch (NotSupportedException ex)\n{\n    // fall back to default scheduler or log environment misconfiguration\n    sched = Scheduler.Default;\n}","preventionTips":["Always reference System.Reactive.PlatformServices in executable projects","Test first access to Scheduler.ThreadPool/TaskPool in your host environment","When replacing IPlatformEnlightenmentProvider, delegate unknown services to the default provider"],"tags":["scheduler","initialization","platform-services","not-supported"],"backgroundTag":"module-init-failed","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}