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