public Task StartAsync(CancellationToken cancellationToken)
        {
            Task.Run(() =>
            {
                using (IKafkaConsumer <Ignore, string> c = this._kafkaConsumerProvider.GetKafkaConsumer <Ignore, string>("consumer-selection-count"))
                {
                    c.Subscribe();

                    try
                    {
                        while (true)
                        {
                            try
                            {
                                var cr = c.Consume(cancellationToken);
                                _logger.LogInformation($"1. Consumed message '{cr.Message.Value}' at: '{cr.TopicPartitionOffset}'.");
                                SelectionSummaryKafkaMessage kafkaSocketMessage = null;
                                try
                                {
                                    kafkaSocketMessage = cr.Message?.Value?.FromJSON <SelectionSummaryKafkaMessage>();
                                }
                                catch (Exception ex)
                                {
                                    _logger.LogError($"Exception occured in KafkaSocketMessage deserialization: {ex.Message}");
                                }

                                if (kafkaSocketMessage != null)
                                {
                                    SocketMessage calculationResultMessage = new SocketMessage()
                                    {
                                        Code = "selection_count_calculated",
                                        Data = kafkaSocketMessage
                                    };

                                    Task.Run(async() => { await _sampleSocketMessageHandler.SendMessageAsync(kafkaSocketMessage.UserId, calculationResultMessage.ToJSON()); });
                                }
                            }
                            catch (ConsumeException e)
                            {
                                _logger.LogError($"Error occured: {e.Error.Reason}");
                            }
                        }
                    }
                    catch (OperationCanceledException e)
                    {
                        _logger.LogError($"OperationCanceledException occured: {e.Message}");
                        c.Close();
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError($"Exception occured: {ex.Message}");
                    }
                }
            }, cancellationToken);

            Task.Run(() =>
            {
                using (IKafkaConsumer <Ignore, string> c = this._kafkaConsumerProvider.GetKafkaConsumer <Ignore, string>("consumer-selection-synchronization"))
                {
                    c.Subscribe();

                    try
                    {
                        while (true)
                        {
                            try
                            {
                                var cr = c.Consume(cancellationToken);
                                _logger.LogInformation($"2. Consumed message '{cr.Message.Value}' at: '{cr.TopicPartitionOffset}'.");
                                SelectionSummaryKafkaMessage[] kafkaSocketMessage = null;
                                try
                                {
                                    kafkaSocketMessage = cr.Message?.Value?.FromJSON <SelectionSummaryKafkaMessage[]>();
                                }
                                catch (Exception ex)
                                {
                                    _logger.LogError($"Exception occured in KafkaSocketMessage deserialization: {ex.Message}");
                                }

                                if (kafkaSocketMessage != null)
                                {
                                    SocketMessage calculationResultMessage = new SocketMessage()
                                    {
                                        Code = "selection_synchronization_calculated",
                                        Data = kafkaSocketMessage
                                    };

                                    Task.Run(async() => { await _sampleSocketMessageHandler.SendMessageAsync(kafkaSocketMessage.First().UserId, calculationResultMessage.ToJSON()); });
                                }
                            }
                            catch (ConsumeException e)
                            {
                                _logger.LogError($"Error occured: {e.Error.Reason}");
                            }
                        }
                    }
                    catch (OperationCanceledException e)
                    {
                        _logger.LogError($"OperationCanceledException occured: {e.Message}");
                        c.Close();
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError($"Exception occured: {ex.Message}");
                    }
                }
            }, cancellationToken);

            return(Task.CompletedTask);
        }