使用 Parallel.ForEach 并行创建多个请求并将它们放入列表中

Using Parallel.ForEach Create multiple requests in parallel and put them in the list

所以我不得不创建几十个 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

形式存在的解决方案

我的假设是否正确但实施有误,还是我应该使用其他解决方案?

I also wanted the requests to be parallel

你真正想要的是并发个请求。 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;
}