Вызов службы с нумерацией страниц асинхронно c # - PullRequest
0 голосов
/ 07 ноября 2019

Следующая служба вызывается из моего метода

https://myservice? Index = 0 & rows = 500

index: смещение в наборе результатов запроса. Сервис вернет результаты из этого смещения. По умолчанию 0, т. Е. Начиная с первого результата.

строки: количество результатов, возвращаемых за запрос. По умолчанию 10, а максимальное число может быть 500

Мне нужно продолжать разбивать на страницы, пока параметр start не достигнет значения totalRows в ответном JSON. Предположим, что если общее количество записей равно 10000, мне нужно 20 раз вызвать службу

Можно ли изменить код таким образом, чтобы последующие вызовы службы после первого делались асинхронными для повышения производительности

public List<FinalOutputDetails> GetFinalOutput()
{
        List<FinalOutputDetails> FinalOutput = new List<FinalOutputDetails>();
        int totalRows = 500;
        int index = 0;
        int end = 500;
        while (index <= totalRows)
        {
            string result =CallRemoteService();  // call service https://myservice?index=0&amp;rows=500

            var patrialResultDetails = JsonConvert.DeserializeObject<ServiceResultDetails>(result);

            totalRows = patrialResultDetails.totalRows;

            FinalOutput.AddRange(patrialResultDetails);

            start += 500;
            end += 500;
        }
        return FinalOutput;
  }

1 Ответ

0 голосов
/ 07 ноября 2019

Да Возможно, легко сделать функцию CallRemoteService () как

async Task<string>CallRemoteService()

, это означает, что этот метод можно вызывать много раз, прежде чем возвращать результат для первого или других вызовов.

И вызывать его асинхронно

Task.Run(async () => string result =await CallRemoteService() ... and do other job to add result to main total string builder here..);

с этой строкой ваше приложение не будет ждать результата ..

Но я должен сообщить вам. Вы потеряете свой заказ. Если вам нужен правильный порядок, это означает, что вам нужно дождаться первого результата, а затем - второго. Но это означает, что ваш вопрос неверен.

...