VL
Кто-нибудь может помочь с багой связаной с BackgroundService?
У меня есть hosted BackgroundService, который циклически проверяет синглтон очередь BackgroundTaskQueue (внутри которой ConcurrentQueue<Func<CancellationToken, Task>> queue) и запускает таски оттуда.
Внутри контроллеров при необходимости в очередь скидываются лямбды:
this.item1PublishBackgroundTaskQueue.QueueBackgroundWorkItem(
async cancellationToken => { await publishItem1AppServ.Publish(item1).ConfigureAwait(false); }):
Это один пример, а в других что-то подобное:
async cancellationToken => { await publishItem1AppServ.Publish(item1).ConfigureAwait(false); }
async cancellationToken => { await publishItem2AppServ.Publish(item2).ConfigureAwait(false); }
async cancellationToken => { await publishItem3AppServ.Publish(item3).ConfigureAwait(false); }
В контроллерах publishItem..AppServ инжектяться (Transient). А в сами реализации этих сервисов могут инжектится автомаппер, и другие сервисы, которые явно инжектятся (Transient).
Падает ошибка при попытке воспользоваться кастомным ValueResolver - Cannot access a disposed object. Object name: 'IServiceProvider'. System.ObjectDisposedException.
Есть мысли что нужно обрабатывать таски из очереди внутри скоупа IServiceScopeFactory (добавленого в BackgroundService), но не могу понять а что вообще вытягивать из скоупа, если в очередь могут приходить любые сервисы.
Any ideas?)