Архитектурный вопрос TPL

Я сейчас работаю над проектом,где у нас есть задача обрабатывать элементы параллельно. Пока ничего страшного;) Теперь к проблеме. У нас есть список идентификаторов, в котором мы периодически (каждые 2 секунды) вызываем StoredProcedure для каждого идентификатора. Эти 2 секунды необходимо проверять для каждого элемента отдельно, поскольку они добавляются и удаляются во время выполнения. Вдобавок мы хотим настроить максимальную степень параллелизма, так как БД не должна быть переполнена 300 потоками одновременно. Элемент, который обрабатывается, не должен быть перепланирован для обработки до тех пор, пока он не завершит предыдущее выполнение. Причина в том, что мы хотим предотвратить создание очереди большого количества элементов в случае задержек в базе данных.

Прямо сейчас мы используем компонент собственной разработки, у которого есть основной поток, который периодически проверяет, какие элементы нужно запланировать. для обработки. Получив список, он отбрасывает их в настраиваемый пул потоков на основе IOCP, а затем использует дескрипторы ожидания для ожидания обработки элементов. Затем начинается следующая итерация. IOCP из-за кражи работы, которую он обеспечивает.

Я хотел бы заменить эту пользовательскую реализацию версией TPL / .NET 4, и я хотел бы знать, как вы ее решите (в идеале простой и удобный для чтения / сопровождения) . Я знаю об этой статье: http://msdn.microsoft.com/en-us/library/ee789351.aspx , но она просто ограничивает количество используемых потоков. Оставляет работу кражей, периодически выполняя элементы ....

В идеале он станет универсальным компонентом, который можно будет использовать для некоторых всех задач, которые необходимо выполнять периодически для списка элементов.

любой ввод приветствуется. , тиа Мартин

6
задан Martin Moser 10 June 2011 в 15:03
поделиться