public async Task Start() { if (_hasStarted) { throw new InvalidOperationException("This scheduler is already started."); } _hasStarted = true; _failedJobQueue.Monitor(); _recoverableAction.Monitor(); var tasks = _jobPumps.Select(p => p.Start()).ToArray(); await Task.WhenAny(tasks).FailFastOnException(); }