使用并行.foreach并行创建多个请求,然后将它们放在列表中



,因此我必须创建数十个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

形式中存在的解决方案

我的假设正确,我实现了错误还是应该使用其他解决方案?

我还希望并行请求

您实际想要的是并发请求。Parallelasync无效。

要执行异步并发,您 start ar 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;
}

最新更新