Вызов нескольких веб-сервисов асинхронно - PullRequest
0 голосов
/ 02 мая 2019

Я получаю список объектов с URL, некоторыми данными и идентификатором пользователя. Я хочу написать функцию для асинхронного вызова различных веб-служб и возврата списка ответа и идентификатора пользователя в списке. Но если URL-адрес один и тот же, то вызов должен быть синхронным с этой конкретной службой с другими данными, предоставленными во входных данных.

1 Ответ

1 голос
/ 02 мая 2019

Вы можете выполнить следующие шаги - Сгруппировать список по URL - передать сгруппированный элемент в отдельный асинхронный метод - второй метод сделал бы вызов службы как синхронно

Пожалуйста, обратитесь к ниже код

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...