Вы можете превратить это в правильный перечислимый метод, получая результаты один за другим.
public IEnumerable<Foo> GetItems<Foo>() {
Page currentPage;
do
{
currentPage = _pagedApi.GetNextPage(reqid);
foreach (var item in currentPage)
yield return (Foo)item;
} while (currentpage.HasNextPage);
}
Вам все равно нужно будет получать по одной странице за раз, поэтому, если вы попросите 6, а размер страницы _pagedApi
равен 5, вы получите 2 страницы вместо всех.Эти издержки, вероятно, намного меньше, чем при выборке каждой записи по одной, а не по страницам.
В этом сила интерфейса IEnumerable, он создает конечный автомат в фоновом режиме, который отслеживаеттекущего состояния вашего цикла (вы можете найти его здесь в SO или MSDN, если вам нужно подробное объяснение).