,因此我必须创建数十个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
我的假设正确,我实现了错误还是应该使用其他解决方案?
我还希望并行请求
您实际想要的是并发请求。Parallel
与async
无效。
要执行异步并发,您 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;
}