C#
ページネーション
1 ページ、全ページ、または 1 アイテムずつ。
1 ページ
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);}ListAsync メソッドは Items、HasMore、NextCursor を持つ Page を返し、foreach でその項目を走査できます。次のページを読むには、同じフィルターを付けて NextCursor を cursor: として渡します。
全ページ
var failed = await client.Emails.ListAllAsync(status: new[] { "failed" }); Console.WriteLine($"{failed.Count} messages failed");ListAllAsync メソッドはカーソルを最後までたどり、すべての項目を 1 つのリストで返します。いずれかのページで失敗すると、呼び出し全体が失敗します。
1 件ずつ
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"]);}IterateAsync メソッドは IAsyncEnumerable<JsonObject> を返します。ループがそこに到達したときにだけ次のページを要求するため、break でリクエストが止まります。ページ分割されるすべてのリストに、走査対象のリストにちなんだ名前で 3 つすべてがあります。たとえば ListEventsAsync には ListAllEventsAsync と IterateEventsAsync があります。
走査は、すでにたどったカーソルを API が繰り返すと停止するため、無限にループすることはありません。