Я читал кучу статей о новом TPL в .NET 4. Большинство из них рекомендует использовать Tasks вместо Thread.QueueUserWorkItem.Но из того, что я понимаю, задачи не являются потоками.Итак, что происходит в следующем сценарии, где я хочу использовать очередь Producer / Consumer с использованием нового класса BlockingCollection в .NET 4:
Очередь инициализируется с параметром (скажем, 100), чтобы указать числорабочих задач.Task.Factory.StartNew () вызывается для создания группы задач.
Затем в очередь добавляется новый рабочий элемент, потребитель берет эту задачу и выполняет ее.
Теперь, исходя из вышеизложенного, представляется, что существует ограничение на количество задач, которые вы можете выполнять одновременно, при использовании Thread.QueueUserWorkItem CLR будет использовать пул потоков с размером пула по умолчанию.
По сути, я пытаюсь понять, что использование Tasks with BlockingCollection подходит для сценария, в котором я хочу создать службу Windows, которая опрашивает базу данных для заданий, готовых к запуску.Если задание готово к выполнению, таймер в службе Windows (мой единственный производитель) добавит новый рабочий элемент в очередь, где задание будет затем отобрано и выполнено рабочей задачей.
Делает ли этоимеет смысл использовать очередь производителя / потребителя в этом случае?А как насчет количества рабочих заданий?