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); }