A>Одним потоком через new Thread живущий на протяжении работы приложения бегаем по базе/очереди и получаем данные для дальнейшей обработки.
A>Далее через Task.Factory.StartNew запускаем таски для выполнения полезных действий.
A>Лимитируем все это семафором
Че-т все равно смутно.
Что то типа такого?
while(true) {
var workItem = getWorkItem();
Task.Factory.StartNew(()=>{
m_Semaphore.WaitOne();
// Proces...
m_Semaphore.Release();
});
}
Если да, то скорость генерации данных как-то лимитируется?
Потому что если нет, есть риск получить классический over-subscription:
данных поступает все больше и больше (при фиксированной скорости потребления).
ThredPool начинает наращивать количество тредов. А данных все больше и больше
Пул растет как бешеный. В итоге все время тратится на переключение контекстов вместо реальной работы.