Параллельные циклы в методе запроса WebApi - PullRequest
0 голосов
/ 07 ноября 2019

Безопасно ли использовать Task.Parallel библиотеку в WebApi методах? Если безопасно использовать Parallel в веб-запросах API, как спроектировать функцию для работы с большим количеством данных, которые мы можем вычислить с помощью параллелизма? Что может пойти не так, когда многие пользователи будут выполнять этот запрос API с параллельным циклом?

[HttpGet]
public async Task<ActionResult<ProjectModel>> GetSomething()
{
    //some code...
    Parallel.ForEach(array, (current) => 
    {
        //do something
    });
}

1 Ответ

0 голосов
/ 07 ноября 2019

Да, это безопасно.

Но есть и другой известный шаблон. Используйте очереди сообщений. Когда Web API получает запрос, отправьте рабочее сообщение в очередь сообщений. Из консольного / рабочего приложения считайте сообщения из очереди и обработайте их.

Этот подход имеет следующие преимущества:

  1. Поскольку веб-API передает сообщение в очередь, а не обрабатывает его, существуетменьше вероятность тайм-аутов
  2. Масштабирование будет проще, вам нужно просто запустить больше экземпляров рабочего для обработки огромного отставания.
  3. Веб-серверы могут обрабатывать больше запросов.

Есть много брокеров сообщений, таких как rabbitmq, kafka.

...