170 похожих чатов

Всем привет! попробую обрисовать проблему. У меня есть легаси код.

web-api net core. В DI контейнере настраивается жизненных цикл объектов в том числе и объекта UoW который в себе хранит EF контекст. этот UoW реализует dispose метод ,который выставляет null внутреннему полю тип, которого EF контекст, и так же диспойзит его. То есть есть UoW объект, который реализует IDisposable. этот UoW объект передается в конструктор контроллера. в DI контейнере этот UoW объект зареган в Scoped жизнненом цикле. НООО в методе контролера два действия! 1) выполнить какие-то преобразования и сохранить это в БД через объект UoW и его Method1() , а перед этим создается ОТДЕЛЬНЫЙ ПОТОК в который передается тот же самый UoW объект, который выполняет длительную операцию (около нескольких минут) по принципу запустил и забыл в Method2() и в самом конце этого метода дергается контекст EF и пытается сохранить что-то в бд. Как ни трудно догадаться в итоге в Method2() возникает Null ref exception тк контейнер DI вызвал Dispose у объекта UoW. Я почти уверен, что в такой ситуации нельзя дергать в другом потоке объекты жизненных цикл которых настраивается для другой цели и задачи. Но тогда как лучше поступить? Но я могу ошибаться, для того и пишу вопрос. Из решений на ум приходит только создание отдельного сервиса, который будет слушать поступление новых команд на выполнение какого либо запроса (quartz, hangfire) и выполнять ту самую операцию которая лежит в Method2(), а в методе контроллера где дергался Method1() написать что-то вроде отправки команды на выполнение работы в Method2()

8 ответов

24 просмотра

на ум пришло верное решение, так и делайте. наследуете IHostedService, запускаете таску со стартом приложения и пуляете в нее Items для обработки.

_Д_- Автор вопроса
Ivan Konstantinov
на ум пришло верное решение, так и делайте. наслед...

То есть в асп нет коре есть фоновые сервисы которые слушают входящую очередь сообщений? прикольно! звучит как то что нужно! спасибо

_Д_
То есть в асп нет коре есть фоновые сервисы которы...

Оно не слушает входящую очередь по дефолту — это надо ручками написать. Но фоновые задачи есть, да.

_Д_- Автор вопроса
Ivan Konstantinov
Оно не слушает входящую очередь по дефолту — это н...

но сам факт, что можно дернуть из моего родительского метод апи этого фонового сервиса положив туда сериализованный объект над которым надо попотеть ему?

_Д_
но сам факт, что можно дернуть из моего родительск...

ога, так можно. но тут еще другой вопрос сразу учтите: 1. метод контроллера отработал и положил в очередь Item 2. в очереди уже N item-ов 3. приложение выключили (свет потух, сервак в ребут, и т.д.) что делать с объектами, которые были в очереди, но не успели обработаться?

_Д_- Автор вопроса
Ivan Konstantinov
ога, так можно. но тут еще другой вопрос сразу уч...

ну лично я бы записывал в персистентное хранилище команду на обработку вторым фоновым процессом. но это уже детали.

_Д_
ну лично я бы записывал в персистентное хранилище ...

ну просто продумайте этот момент, а так все правильно думаете — фоновый сервис и обработка отдельно от метода контроллера.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта