Size: a a a

var chat = new Chat();

2020 November 17

C

Cimon in var chat = new Chat();
источник

C

Cimon in var chat = new Chat();
источник

C

Cimon in var chat = new Chat();
второй скрин это с репозитория метод к которому обращается метод в сервисе
источник

VL

Vova Lantsov in var chat = new Chat();
_unitOfWork тоже scoped?
источник

C

Cimon in var chat = new Chat();
да
источник

C

Cimon in var chat = new Chat();
нет синглтон регистраций
источник

C

Cimon in var chat = new Chat();
пробовал transient, тоже самое
источник

VL

Vova Lantsov in var chat = new Chat();
Cimon
я так понимаю его DI диспоузит - как этого избежать, гуглил, говорят что ошибка может быть из-за того что вызов идет в async void , но я подписываюсь на ивент сторонней либы, где не могу менять сигнатуру метода и приходится вызывать async void
Покажи теперь где на событие подписался
источник

C

Cimon in var chat = new Chat();
Vova Lantsov
Покажи теперь где на событие подписался
источник

VL

Vova Lantsov in var chat = new Chat();
Не это понятно, интересует логика где ты с бд работаешь
источник

VL

Vova Lantsov in var chat = new Chat();
Где сервис вытягиваешь внутри события
источник

C

Cimon in var chat = new Chat();
источник

C

Cimon in var chat = new Chat();
вот тут
источник

C

Cimon in var chat = new Chat();
источник

VL

Vova Lantsov in var chat = new Chat();
_client_OnMessage я имел в виду метод
источник

C

Cimon in var chat = new Chat();
тут дергается этот метод просто
источник

VL

Vova Lantsov in var chat = new Chat();
Cimon
тут дергается этот метод просто
Могу предложить решение в виде пакета Telegram.Bot.Extensions.Polling

Вместо подписки на события и метода StartReceiving(), получаешь метод TelegramBotClient.ReceiveAsync(IUpdateHandler, CancellationToken)

T - класс реализующий IUpdateHandler
Это можно засунуть в hosted service (а именно в BackgroundService), там будет async Task полноценный, но так как hosted service & T это singleton сервисы то придётся получать из конструктора Т тип  IServiceProvider и вручную создавать IServiceScope и вытягивать оттуда сервисы для работы с бд
Класс типа T можно зарегистрировать как singleton и внедрить в hosted service

using (var scope = _serviceProvider.Services.CreateScope())
{
   // По выходу из этого using все scoped сервисы будут диспознуты, ты сам этим управляешь
   var dbContext = scope.ServiceProvider.GetRequiredService<MyDbContext>();
}
источник

VL

Vova Lantsov in var chat = new Chat();
От событий в этой либе советую полностью отказаться в пользу Extensions.Polling
источник

VL

Vova Lantsov in var chat = new Chat();
Cimon
тут дергается этот метод просто
источник

AS

Artyom Sveshnikov in var chat = new Chat();
Cimon
тут дергается этот метод просто
А почему async void, а не async Task? Или так и должно быть?
источник