Я прочитал сотни страниц и использовал так много примеров, что совершенно запутался. Большинство примеров, по-видимому, нацелены на следующее:
- Пусть таймер создаст новый поток, который будет выполнять некоторую работу, с бесконечными потоками.
- Создайте определенное количество потоков, каждый с таймером, который что-то делает
- Регулярно выполняйте какую-либо работу
То, что я пытаюсь сделать, это:
- Запустите таймер для регулярного создания потока
- Этот поток может или не может занять больше времени, чем тик таймера
- Имейте ограничение на количество потоков, которые могут быть созданы
- Когда поток заканчивается, верните поток, чтобы его можно было использовать снова.
- Работа в каждом потоке не зависит друг от друга и может выполняться асинхронно (это не имеет большого значения).
В качестве аналогии я хочу, чтобы мое приложение работало как рыбацкая лодка с 10 лесками. Сначала выбрасываете одну (по требованию), затем другую и так далее. В каждый момент времени в воде может находиться от 0 до 10 лесок. Всякий раз, когда рыба поймана, леска натягивается и готова к повторному забросу (если есть необходимость).
Похоже, я должен использовать ThreadPool? Я также думал, что для простоты я должен создать поток и, если нет работы, немедленно вернуть его (т.е. выбрать количество из какой-либо таблицы и, если количество равно 0, вернуть поток), вместо того, чтобы пытаться разумно выяснить если мне нужно спавнить, потому что есть необходимость.
В общем, когда система спокойна, она будет постоянно порождать один поток, видеть, что работы нет, а затем возвращаться, но в периоды занятости потоки, вероятно, будут использоваться до предела, из-за чего система просто будет продолжать давать сбои. для порождения новых потоков до тех пор, пока один или несколько не будут возвращены снова, когда они будут завершены.
Я пробовал System.Threading, Semaphores и WaitHandles, но все это ужасно сбивает с толку. У меня пока нет кода для показа, так как я продолжаю удалять и начинать заново, используя другой подход. Любая помощь будет оценена по достоинству.
Разрабатываю на С# 2010.