我正在获取带有URL,一些数据和用户ID的对象列表。我想编写一个函数来异步调用不同的Web服务,并在列表中返回响应列表和用户ID。但是,如果URL相同,则调用应与输入提供的不同数据的特定服务同步。
答案 0 :(得分:1)
您可以按照以下步骤 -按网址对列表进行分组 -将分组的项目传递给单独的异步方法 -第二种方法将同步进行服务调用
请参考以下代码
List<Response> DoTask(List<MyObject> list)
{
var groupedList = list.GroupBy(x => x.Url)
var taskList = new List<Task<List<Response>>>();
foreach(group in GroupList)
{
taskList.Add(CallService(group.ToList()))
}
Task.WaitAll(taskList.ToArray());
return taskList.SelectMany(x => x.Result);
}
// This method would get service call of same urls only
async Task<List<Response>> CallService(List<MyObject> list)
{
var responseList = new List<Response>();
foreach(var item in list)
{
var response = new Response();
response.Result = await HttpServiceCall(MyObject object);
response.UserId = item.UserId
responseList.Add(response);
}
return responseList;
}
async Task<Response> HttpServiceCall(MyObject object)
{
//make service call
}