TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
C# Ready | Unity

25 Sep, 11:12

Открыть в Telegram Поделиться Пожаловаться

Читаем все страницы API через IAsyncEnumerable в C#!

Многие API отдают данные порциями. Если собрать все страницы в List сразу, код быстро разрастается, а юзер не увидит ни одной записи до конца загрузки.

IAsyncEnumerable позволяет отдавать элементы по мере чтения следующей страницы. Вызывающий код использует await foreach и не знает, сколько запросов понадобилось внутри.
record Page(IReadOnlyList Items, string? NextCursor);

Метод клиента пусть возвращает страницу и курсор для следующего запроса. Null означает, что сервер больше ничего не отдаёт.
Task GetPageAsync(
string? cursor, CancellationToken token);

В итераторе сохраняем текущий курсор. После каждого ответа возвращаем заказы по одному и только потом запрашиваем следующую страницу.
string? cursor = null;
do {
var page = await GetPageAsync(cursor, token);
foreach (var order in page.Items) yield return order;
cursor = page.NextCursor;
} while (cursor is not null);

Юзер может остановиться в любой момент. CancellationToken важно передавать в сетевой вызов, чтобы отмена не ждала лишнюю страницу.
await foreach (var order in ReadOrders(token))
{
await SaveAsync(order, token);
}

Такой подход полезен для импорта каталога, обработки событий и синхронизации данных. Память не растёт вместе с общим количеством страниц, а обработка начинается сразу после первого ответа.

➡️ C# Ready | #практика

2.2k 0 15 10
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot