private async void ManageWorkerPool(object sender, ElapsedEventArgs e) { var queueMessageCount = await _serviceBusManager.GetMessageCount(); var activeWorkerCount = CurrentWorkerCount(); var totalWorkerCount = TotalWorkerCount(); _log.Info($"Checking service bus and workers. Amount of message in queues: {queueMessageCount}. Amount of workers (active/total): {activeWorkerCount}/{totalWorkerCount}."); switch (await WorkerQueueEvaluator.AdviseAction(activeWorkerCount, totalWorkerCount, queueMessageCount, _targetProcessingSla, _minimumWorkerCount, _httpClient)) { case WorkerAction.Add: _log.Info("Starting new worker."); await StartNewWorker(); break; case WorkerAction.Remove: _log.Info("Shutting worker down."); await ShutWorkerDown(); break; default: _log.Info("No worker action taken."); break; } await _workerPoolMonitor.UpdateAllWorkers(); }