Это правильное использование ThreadPool? Могу ли я быть уверен, что он запустит поток для каждой задачи? - PullRequest
1 голос
/ 06 апреля 2009
    protected override void OnStart(String[] args)
    {
        ResultManager.PrepareCache();
        ThreadPool.QueueUserWorkItem(ResultQueue.Process);
        ThreadPool.QueueUserWorkItem(StatusUpdater.UpdateStatus);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RestartHungTests);
        ThreadPool.QueueUserWorkItem(ResultManager.SyncroniseResultsTable);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RecoverLostResults);
        ThreadPool.QueueUserWorkItem(BrowserTestStartInfo.FillQueues);
        ThreadPool.QueueUserWorkItem(MailAppAccount.FillQueues);
    }

Каждая из этих задач выполняется в течение всего срока службы Службы Windows. Я всегда придерживался ThreadPool для такого рода вещей, я должен просто запускать нормальные потоки? Могу ли я быть уверен, что в ThreadPool будет достаточно потоков для выполнения каждой задачи? Если я установлю значение 7 для MaxMreadThreads, возникнут ли у меня проблемы позже, поскольку эти потоки никогда не прерываются? Безопасно ли устанавливать его на что-то гораздо более высокое?


Edit:

Я всегда хочу, чтобы все 7 потоков работали одновременно, и они никогда не прерывались - я должен даже использовать потоки? Есть ли что-то еще более подходящее для такого рода постоянно выполняемых задач?

Каждое задание запускается определенным методом каждые x минут.

Ответы [ 2 ]

11 голосов
/ 06 апреля 2009

Это неправильное использование пула потоков. Просто создайте нормальные темы, так как они долговечны. Затраты на создание потоков не будут иметь значения, поскольку вы будете создавать их только один раз.

4 голосов
/ 06 апреля 2009

Как говорит Джон, это не очень хорошая идея. Причина в том, что пул потоков имеет ограниченное количество потоков, и вы используете большое их количество и никогда не возвращаете их. Пул потоков предназначен для использования пула потоков с коротким сроком службы.

На самом деле вам не нужно управлять потоками, поскольку они живут на протяжении всего жизненного цикла приложения.

...