异步调用多个WebService

时间:2019-05-02 08:14:33

标签: c# asp.net multithreading web service

我正在获取带有URL,一些数据和用户ID的对象列表。我想编写一个函数来异步调用不同的Web服务,并在列表中返回响应列表和用户ID。但是,如果URL相同,则调用应与输入提供的不同数据的特定服务同步。

1 个答案:

答案 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
}