public void Execute() { var groupingMatches = _selector.GetCandidatesMethodsOfGroupNameGrouped(); foreach (var matchGroup in groupingMatches) { ICollection <string> topics; try { using (var client = _consumerClientFactory.Create(matchGroup.Key)) { topics = client.FetchTopics(matchGroup.Value.Select(x => x.TopicName)); } } catch (BrokerConnectionException e) { _isHealthy = false; _logger.LogError(e, e.Message); return; } for (int i = 0; i < _options.ConsumerThreadCount; i++) { var topicIds = topics.Select(t => t); Task.Factory.StartNew(() => { try { using (var client = _consumerClientFactory.Create(matchGroup.Key)) { _serverAddress = client.BrokerAddress; RegisterMessageProcessor(client); client.Subscribe(topicIds); client.Listening(_pollingDelay, _cts.Token); } } catch (OperationCanceledException) { //ignore } catch (BrokerConnectionException e) { _isHealthy = false; _logger.LogError(e, e.Message); } catch (Exception e) { _logger.LogError(e, e.Message); } }, _cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); } } _compositeTask = Task.CompletedTask; }