Я собираюсь запустить проект C# .NET 4.0, который создает планировщик заданий.Планировщик заданий с использованием MultiThreading с приоритетом
- Срок действия задания не установлен и потенциально долго работает, вплоть до дней.
- Работа имеет 3 приоритета: простой, нормальный, критический; от самого низкого до самого высокого.
- Новые задания (ы) постоянно создаются.
- Более новая работа с более высоким приоритетом должна иметь приоритет над более низким приоритетом, даже если старое задание создано в течение длительного времени.
- Каждая работа будет обрабатываться одной длинной рабочей нитью.
- Работа повторного входа. Состояние задания сохраняется в базе данных, поэтому можно приостановить работу или прекратить работу в любой момент.
Мой план состоит в использовании семафора и задании числа одновременных записей для количества системных ядер. Новый поток будет создан для каждого задания в очереди, и все потоки будут заблокированы семафором в начале.
Моя проблема заключается в том, чтобы гарантировать, что высокоприоритетная цепочка сначала войдет в семафор, когда семафор вызывает метод release(). Выполнимо?
Моя вторая проблема заключается в том, что существует поток, который находится внутри семафора, чтобы выйти, когда появился поток с более высоким приоритетом, и поток выходных заданий возвращается в очередь потоков для ожидания семафора. Выполнимо?
Для этих двух проблем семафор правилен? Если нет, что вы предлагаете?
Почему бы не использовать Quartz.Net? –
Ну, моя схема планирования основана исключительно на приоритете, и определенная работа должна быть остановлена на основе нового прибытия работы. Может ли quartz.net помочь мне здесь? – nobody
Не уверен в прекращении работы, но Quartz.Net имеет приоритетную обработку. –