Обрабатывать ограниченное количество запросов при буферизации остальных - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть требование, при котором я должен совершать много вызовов из БД из потоковых данных. Чтобы удержать пул от бывшего хостинга, мне пришлось ограничить количество звонков. После некоторого исследования у меня появилась идея использовать 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 при запуске приложения, чтобы она начала слушать, когда приложение запущено.

Вопросы:

  1. Это нормально делать это? [Повлияет ли это на производительность при отправке большого количества данных]

  2. Есть ли другой способ выполнить следующее требование

    а. когда данные приходят, поставьте их в очередь

    б. проверить, выполняется ли больше запросов параллельно [у меня это есть со мной]

    с. если да, добавьте его в очередь

    д. иначе возьмите первый элемент из очереди и обработайте. [все данные в очереди должны быть обработаны. ]

Я надеялся, что некоторые методы, такие как Observable concurrentqueue. Но я не получил никакой информации об этом.

Любая помощь будет оценена. Спасибо

...