|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
Фоновые процессы со своими настройками из View05.12.2023, 13:44. Показов 622. Ответов 13
Метки нет (Все метки)
Приложение WPF+Blazor.
MAUI не получилось, так как часть кода переносится из Blazor Server Side и что-то там не поддерживалось, не запускалось (не помню что), а WPF запустилось. Задача вот такая. Допустим приложение создаёт бекапы базы данных, и восстановление из бекапов. На одной из страниц (view) приложения можно это делать вручную. На другой можно задать время автоматического бекапа по указанным дням, времени. Эти таски по бекапам будут постоянно добавляться/удаляться. Как реализовать запуск этих таск в фоне после запуска приложения? То есть не важно на какой мы странице (view) нужно чтобы эти таски работали каждый в своё назначенное время. У меня на ум приходит только что-то похожее на Locator в WPF. То есть объект которые есть всегда и везде. И если при запуске хоть немного представить могу, что запустил объект и добавил его в List локатора, а вот как в работающем приложении добавить/удалить ещё один фоновый процесс. Добавлено через 7 минут Придумал пример проще. Допустим есть почтовый клиент (программа) в которую можно задать неограниченное количество ящиков, но интервал проверки IMAP4 можно задавать для каждого email свой. В любой момент мы можем удалить email, или добавить новый, и установить свой интервал. И ещё уточнение. При всём при этом у приложения есть EF с базой данных, и у каждого (потока | таски | фонового процесса) есть ещё своя БД, подключение к которой задаётся на странице настройки этой таски. Может есть какой-то паттерн для этой задачи?
0
|
|
| 05.12.2023, 13:44 | |
|
Ответы с готовыми решениями:
13
Фоновые процессы загружают ЦП на 100%
Как отключить фоновые процессы? |
|
14132 / 9352 / 1350
Регистрация: 21.01.2016
Сообщений: 35,153
|
|
| 05.12.2023, 13:45 | |
|
1
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
| 05.12.2023, 13:51 [ТС] | |
|
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||
| 06.12.2023, 22:15 [ТС] | |||||||
|
Есть бд, в которой около 100 объектов, нужно запустить их все в фоновых задачах. Время жизни, пока живёт приложение. При закрытии приложения, ждём выполнения каждой Job до логического завершения. Запускаем StarterJob раз в минуту, и внутри StarterJob.Execute формируем новую задачу WorkerObjectJob с уникальным именем, и бесконечным выполнением. WorkerObjectJob запускаем один раз.
Таких объектов будет около 100, но может и больше, один цикл Go() будет несколько раз читать/писать БД, и делать запросы http как к внешним серверам, так и к api. На сколько вообще правильная реализация? И выдержит ли Quartz такую нагрузку, где задача не заканчивается?
0
|
|||||||
|
14132 / 9352 / 1350
Регистрация: 21.01.2016
Сообщений: 35,153
|
|||
| 07.12.2023, 05:41 | |||
|
BeginnerCoderCS, насколько это всё правильно мне сказать сложно. Я не вижу всей картины в целом. Вроде бы ничего криминального не бросается в глаза.
1
|
|||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||
| 07.12.2023, 07:43 [ТС] | |||||||
|
Чем чревато? методы почти все Async в EF (те которые возможно) Я помню где-то такое уже видел предостережения от использования DbContext в отдельных потоках, поэтому даже у gpt спрашивал, но он так себе советчик, когда выходит выше чем создать переменную с методом (по крайней мере фришный). Ну и вот в правильности такого подхода сомневаюсь.
0
|
|||||||
|
14132 / 9352 / 1350
Регистрация: 21.01.2016
Сообщений: 35,153
|
|||
| 07.12.2023, 07:54 | |||
|
Кстати, в случае с фоновыми сервисами Singleton и Scoped - это одно и тоже. Запросов-то никаких нету, scope - весь срок жизни приложения.
1
|
|||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 07.12.2023, 08:13 [ТС] | ||
|
Это проблема именно EF? Если EF оставить только для управления структурой БД, а работу с данными реализовать на linq2db (у него же нет кеша) это решит проблему с работой из разных потоков? Или в принципе подход не правильный, и не зависит от ORM?
0
|
||
|
14132 / 9352 / 1350
Регистрация: 21.01.2016
Сообщений: 35,153
|
|||||
| 07.12.2023, 08:22 | |||||
|
1
|
|||||
|
|
||
| 07.12.2023, 08:50 | ||
|
1
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||||
| 07.12.2023, 09:03 [ТС] | |||||||||
|
Постоянный перезапуск воркера ещё более усложнит логику работы. Но и так же при создании самого воркера идут достаточно ресурсоёмкие процессы. Грубо скажем стартовые 2-4 минуты работы воркера достаточно тяжёлые, а весь остальной процесс занимает где-то 20% ресурсов от стартового, поэтому его не очень желательно останавливать что за зря. А проблемы с кешем и конкурентностью от EF может быть и в эти 2-4 минуты. Ещё уточнение. Внутри этого потока есть общий для всего приложения контекст EF. Но так же внутри при запуске воркер, подключается ещё к своей личной БД, то с ней тоже могут быть проблемы те же что и с общей (кеш и т.д.), или же эти проблемы только в общем контексте могут быть? Вообще выходи так, что этот поток, это типа отдельное консольное приложение, у которого своя работа. Но периодически нужно и на View отправлять данные, ну или скорее всего из View их брать, для периодического отображения процесса. p.s. Допустим воркер это отдельный телеграм-бот, который должен быть постоянно запущен, и отображать свои текущие действия администратору. Куча ботов за которыми нужно поглядывать. У каждого своя БД, и общая БД. Добавлено через 5 минут У меня вот так добавляется
0
|
|||||||||
|
14132 / 9352 / 1350
Регистрация: 21.01.2016
Сообщений: 35,153
|
||||||
| 07.12.2023, 09:05 | ||||||
|
Добавлено через 1 минуту
1
|
||||||
|
|
|||||||
| 07.12.2023, 09:28 | |||||||
Вот так будет по запросу. Добавлено через 1 минуту BeginnerCoderCS, AddDbContext<TContext>(IServiceCollection, ServiceLifetime, ServiceLifetime) ServiceLifetime Enum
1
|
|||||||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||
| 11.12.2023, 01:56 [ТС] | ||||||
|
Quartz не хочет создавать новые задачи, если там крутятся бесконечные. Ну по крайней мере у меня.
Ну и вообще слишком много зависимостей, и так как у каждого потока своя БД, не получается у меня использовать полноценно DI сервисов от DbContext. Поэтому думаю вместо Worker, создать отдельное консольное приложение (пусть будет WorkerApp), и запускать из основного WPF с передачей параметров для запуска нескольких разделённых копий, в которой для каждой можно создать свой DI и работать с сервисами от DbContext. Нужно иметь возможность обмениваться инфой, как минимум запрашивать состояние о работе WorkerApp из WPF и возможности остановки из WPF нужный экземпляр приложения. Ткните в примеры, может есть где-то реализации, где можно содрать опыт. Стартовать консоли через Process или есть что-то правильнее?
Пописался с gpt он мне рассказывает о синхронизации данных через файлы-сигналы, но это жесть конечно. Ещё как я понимаю можно использовать сокеты, хоть их и не использовал никогда, но выглядит по-моему логичнее, чем отдельные файлы. p.s. У каждого потока, или консольного WorkerApp обязательно своя БД. На текущий момент, мне кажется что с использованием DI, даже с DbContextFactory не получается решить, поэтому пытаюсь отделить это в отдельный проект. Если это решается, то подскажите, лучше оставлю тогда потоки для Worker.
0
|
||||||
| 11.12.2023, 01:56 | |
|
Помогаю со студенческими работами здесь
14
Python, Django и фоновые процессы Не завершаютс фоновые процессы EXCEL.EXE Java Eclipse с Android SDK - фоновые процессы
Как на Laravel запустить фоновые процессы в бесконечном цикле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|