Task.Run() с прослушивателем событий IBM MQ с MessageReceivedEvent [оптимизация] ⇐ C#
-
Anonymous
Task.Run() с прослушивателем событий IBM MQ с MessageReceivedEvent [оптимизация]
Я разработал фоновое задание по прослушиванию IBM MQ.
Каждый раз, когда происходит событие MessageReceivedEvent, вызывается обработчик события.
Вот код
защищенное переопределение асинхронной задачи ExecuteAsync(CancellationToken cancelToken) { // Это компромисс. async выполняется синхронно, пока не встретит первое ожидание и поток не будет заблокирован. ожидайте Task.Yield(); _logger.LogInformation("Начать задание"); cancelToken.Register(() => _logger.LogInformation($"{nameof(job)}::{nameof(ExecuteAsync)}: Задача потребителя IBM MQ останавливается"); _mqConsumerTask = Task.Run(() => // это заменяет async/await? Как оптимизировать? { _mqConsumer.MessageReceivedEvent += OnMessageReceivedEvent; ConnectToMq (токен отмены); }, токен отмены); } Здесь вы можете видеть, что я использую Task.Run и регистрирую здесь обработчик событий. Когда я пытаюсь использовать ключевое слово await в следующем EventHandler, я получаю ошибку времени компиляции. Это мой обработчик событий, который является обработчиком событий aysnc
private async void OnMessageReceivedEvent(отправитель объекта, IbmMQMessageReceivedEventArgs eventArgs) { // здесь находится некоторая асинхронная работа, связанная с БД } Как вы будете оптимизировать этот код? Я немного растерян, так как не понимаю, оптимизирован ли этот код с точки зрения производительности, как это сделал бы async/await, если бы я использовал его вместо Task.Run.
Я разработал фоновое задание по прослушиванию IBM MQ.
Каждый раз, когда происходит событие MessageReceivedEvent, вызывается обработчик события.
Вот код
защищенное переопределение асинхронной задачи ExecuteAsync(CancellationToken cancelToken) { // Это компромисс. async выполняется синхронно, пока не встретит первое ожидание и поток не будет заблокирован. ожидайте Task.Yield(); _logger.LogInformation("Начать задание"); cancelToken.Register(() => _logger.LogInformation($"{nameof(job)}::{nameof(ExecuteAsync)}: Задача потребителя IBM MQ останавливается"); _mqConsumerTask = Task.Run(() => // это заменяет async/await? Как оптимизировать? { _mqConsumer.MessageReceivedEvent += OnMessageReceivedEvent; ConnectToMq (токен отмены); }, токен отмены); } Здесь вы можете видеть, что я использую Task.Run и регистрирую здесь обработчик событий. Когда я пытаюсь использовать ключевое слово await в следующем EventHandler, я получаю ошибку времени компиляции. Это мой обработчик событий, который является обработчиком событий aysnc
private async void OnMessageReceivedEvent(отправитель объекта, IbmMQMessageReceivedEventArgs eventArgs) { // здесь находится некоторая асинхронная работа, связанная с БД } Как вы будете оптимизировать этот код? Я немного растерян, так как не понимаю, оптимизирован ли этот код с точки зрения производительности, как это сделал бы async/await, если бы я использовал его вместо Task.Run.
Мобильная версия