Использование Parallel.ForEach Создайте несколько запросов параллельно и поместите их в список - PullRequest
0 голосов
/ 18 февраля 2019

Итак, мне пришлось создать десятки запросов API и заставить json сделать его объектом и поместить его в список.Я также хотел, чтобы запросы были параллельными, потому что меня не волнует порядок, в котором объекты входят в список.

  public ConcurrentBag<myModel> GetlistOfDstAsync()
  {
   var req = new RequestGenerator();
   var InitializedObjects = req.GetInitializedObjects();
   var myList = new ConcurrentBag<myModel>();

   Parallel.ForEach(InitializedObjects, async item =>
            {
            RestRequest request = new RestRequest("resource",Method.GET);
            request.AddQueryParameter("key", item.valueOne);
            request.AddQueryParameter("key", item.valueTwo);


            var results = await GetAsync<myModel>(request);

            myList.Add(results);
            });

   return myList;
   }

Что создает новую проблему, я не понимаю, как поместить их в списоки мне кажется, что я не использую решение, существующее в форме ConcurrentBag

Правильно ли мое предположение и я неправильно его реализую или мне следует использовать другое решение?

1 Ответ

0 голосов
/ 19 февраля 2019

Я также хотел, чтобы запросы были параллельными

На самом деле вам нужно одновременных запросов.Parallel не работает должным образом с async.

Чтобы выполнить асинхронный параллелизм, вы запускаете каждый запрос, но еще не await выполняете задачи.Затем вы можете await все задачи вместе и получить ответы, используя Task.WhenAll:

public async Task<myModel[]> GetlistOfDstAsync()
{
  var req = new RequestGenerator();
  var InitializedObjects = req.GetInitializedObjects();
  var tasks = InitializedObject.Select(async item =>
  {
    RestRequest request = new RestRequest("resource",Method.GET);
    request.AddQueryParameter("key", item.valueOne);
    request.AddQueryParameter("key", item.valueTwo);
    return await GetAsync<myModel>(request);
  }).ToList();

  var results = await TaskWhenAll(tasks);
  return results;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...