public async Task OnCommentaryActionAsync(CommentaryNotification info) { _commentaryActionProducer.Produce(TOPIC, new Message <Null, CommentaryNotification>() { Value = info }); }
public async Task OnCommentaryActionAsync(CommentaryNotification info) { var currentDayStatistic = await _dbAccess.GetBlogDayStatisticAsync(DateTime.UtcNow.Date); var countDelta = info.Action switch { CommentaryAction.CREATED => 1, CommentaryAction.DELETED => - 1, _ => throw new NotSupportedException() }; currentDayStatistic.CommentariesCount += countDelta; #warning save changes should not be here await _db.SaveChangesAsync(); }
async Task dispatcherLoopAsync() { await ThreadingUtils.ContinueAtDedicatedThread(); while (true) { try { var message = _consumer.Consume(); var scope = _scopeBuilder .CreateScope(); var controller = scope.ServiceProvider .GetRequiredService <IStatisticServiceAPI>(); var parameter = message.Value; var handler = getHandler(); executeAsync(); ///////////////////////////////////////////// Func <Task> getHandler() { return(message.Value switch { CommentaryNotification cn => () => controller.OnCommentaryActionAsync(cn), PostNotification pn => () => controller.OnPostActionAsync(pn), SeenNotification sn => () => controller.OnSeenAsync(sn), UserNotification un => () => controller.OnUserActionAsync(un), _ => throw new NotSupportedException() }); } async void executeAsync() { using (scope) { await ThreadingUtils.ContinueAtThreadPull(); await handler(); _logger.LogInformation($"Consumed message '{message.Value}' at: '{message.TopicPartitionOffset}'."); } } }