У меня есть требование, при котором я должен совершать много вызовов из БД из потоковых данных. Чтобы удержать пул от бывшего хостинга, мне пришлось ограничить количество звонков.
После некоторого исследования у меня появилась идея использовать BlockingCollection
.
Когда я отправляю данные на объект BlockingCollection
и, используя GetConsumingEnumerable()
, я продолжаю слушать сообщения
Вот как это делается
public BlockingCollection<ModelType> dataValues = new BlockingCollection<ModelType>(boundedCapacity: _poolLimit);
public void StartBlockingCollectionListen()
{
foreach (var data in dataValues.GetConsumingEnumerable())
{
if (dataValues != null)
{
// send out for execution
}
}
}
Я вызвал функцию StartBlockingCollectionListen при запуске приложения, чтобы она начала слушать, когда приложение запущено.
Вопросы:
Это нормально делать это? [Повлияет ли это на производительность при отправке большого количества данных]
Есть ли другой способ выполнить следующее требование
а. когда данные приходят, поставьте их в очередь
б. проверить, выполняется ли больше запросов параллельно [у меня это есть со мной]
с. если да, добавьте его в очередь
д. иначе возьмите первый элемент из очереди и обработайте. [все данные в очереди должны быть обработаны. ]
Я надеялся, что некоторые методы, такие как Observable concurrentqueue. Но я не получил никакой информации об этом.
Любая помощь будет оценена.
Спасибо