Paginação
Uma página, todas as páginas ou um item de cada vez.
Uma página
var page = await client.Threads.ListAsync(folder: "inbox", limit: 25); foreach (var thread in page){ Console.WriteLine(thread["id"]);} if (page.HasMore){ var next = await client.Threads.ListAsync(folder: "inbox", limit: 25, cursor: page.NextCursor); Console.WriteLine(next.Count);}Um método ListAsync devolve uma Page com Items, HasMore e NextCursor, e foreach percorre os seus itens. Volte a passar NextCursor como cursor:, com os mesmos filtros, para ler a página seguinte.
Todas as páginas
var failed = await client.Emails.ListAllAsync(status: new[] { "failed" }); Console.WriteLine($"{failed.Count} messages failed");Um método ListAllAsync segue o cursor até ao fim e devolve todos os itens numa única lista. Uma falha em qualquer página faz falhar a chamada inteira.
Um item de cada vez
await foreach (var contact in client.Contacts.IterateAsync(limit: 100)){ if ((string?)contact["email"] == "[email protected]") { break; }} await foreach (var entry in client.Emails.IterateEventsAsync("msg_3f9a1c07d2b84e6a9c5b1f20")){ Console.WriteLine(entry["type"]);}Um método IterateAsync devolve um IAsyncEnumerable<JsonObject>, que só pede a página seguinte quando o ciclo lá chega, por isso um break interrompe os pedidos. Cada lista paginada tem os três, com o nome da lista que percorrem: ListAllEventsAsync e IterateEventsAsync ao lado de ListEventsAsync.
Um percurso para quando a API repete um cursor que já seguiu, por isso nunca pode andar às voltas sem fim.