Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Paginator
Beberapa AWS layanan mengumpulkan dan menyimpan sejumlah besar data, yang dapat Anda ambil dengan menggunakan API panggilan. AWS SDK for .NETJika jumlah data yang ingin Anda ambil menjadi terlalu besar untuk satu API panggilan, Anda dapat memecah hasilnya menjadi potongan-potongan yang lebih mudah dikelola melalui penggunaan pagination.
Untuk memungkinkan Anda melakukan pagination, objek permintaan dan respons untuk banyak klien layanan dalam SDK menyediakan token kelanjutan (biasanya bernamaNextToken
). Beberapa klien layanan ini juga menyediakan paginator.
Paginator memungkinkan Anda untuk menghindari overhead token lanjutan, yang mungkin melibatkan loop, variabel status, beberapa API panggilan, dan sebagainya. Bila Anda menggunakan paginator, Anda dapat mengambil data dari AWS layanan melalui satu baris kode, deklarasi foreach
loop. Jika beberapa API panggilan diperlukan untuk mengambil data, paginator menangani ini untuk Anda.
Di mana saya menemukan paginator?
Tidak semua layanan menyediakan paginator. Salah satu cara untuk menentukan apakah layanan menyediakan paginator untuk tertentu API adalah dengan melihat definisi kelas klien layanan di Referensi.AWS SDK for .NET API
Misalnya, jika Anda memeriksa definisi untuk AmazonCloudWatchLogsClientkelas, Anda melihat Paginators
properti. Ini adalah properti yang menyediakan paginator untuk Amazon CloudWatch Logs.
Apa yang diberikan paginator kepada saya?
Paginator berisi properti yang memungkinkan Anda melihat respons lengkap. Mereka juga biasanya berisi satu atau lebih properti yang memungkinkan Anda mengakses bagian paling menarik dari tanggapan, yang akan kami sebut hasil utama.
Misalnya, dalam yang AmazonCloudWatchLogsClient
disebutkan sebelumnya, Paginator
objek berisi Responses
properti dengan DescribeLogGroupsResponseobjek penuh dari API panggilan. Responses
Properti ini berisi, antara lain, kumpulan grup log.
Objek Paginator juga berisi satu hasil kunci bernama. LogGroups
Properti ini hanya menyimpan bagian log grup dari respons. Memiliki hasil kunci ini memungkinkan Anda untuk mengurangi dan menyederhanakan kode Anda dalam banyak keadaan.
Pagination sinkron vs. asinkron
Paginator menyediakan mekanisme sinkron dan asinkron untuk pagination. Pagination sinkron tersedia di. NETFramework 4.7.2 (atau yang lebih baru) proyek. Pagination asinkron tersedia di. NETProyek inti (. NETInti 3.1,. NET5, dan sebagainya).
Karena operasi asinkron dan. NETInti direkomendasikan, contoh yang muncul berikutnya menunjukkan pagination asinkron Anda. Informasi tentang cara melakukan tugas yang sama menggunakan pagination sinkron dan. NETFramework 4.7.2 (atau yang lebih baru) ditampilkan setelah contoh di. Pertimbangan tambahan untuk paginator
Contoh
Contoh berikut menunjukkan cara menggunakan AWS SDK for .NET untuk menampilkan daftar grup log. Sebagai kontras, contoh menunjukkan bagaimana melakukan ini baik dengan maupun tanpa paginator. Sebelum melihat kode lengkap, ditampilkan nanti, pertimbangkan cuplikan berikut.
Mendapatkan grup CloudWatch log tanpa paginator
// Loop as many times as needed to get all the log groups var request = new DescribeLogGroupsRequest{Limit = LogGroupLimit}; do { Console.WriteLine($"Getting up to {LogGroupLimit} log groups..."); var response = await cwClient.DescribeLogGroupsAsync(request); foreach(var logGroup in response.LogGroups) { Console.WriteLine($"{logGroup.LogGroupName}"); } request.NextToken = response.NextToken; } while(!string.IsNullOrEmpty(request.NextToken));
Mendapatkan grup CloudWatch log dengan menggunakan paginator
// No need to loop to get all the log groups--the SDK does it for us behind the scenes var paginatorForLogGroups = cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest()); await foreach(var logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); }
Hasil dari kedua cuplikan ini persis sama, sehingga keuntungan dalam menggunakan paginator dapat dilihat dengan jelas.
catatan
Sebelum Anda mencoba membangun dan menjalankan kode lengkap, pastikan Anda telah menyiapkan lingkungan dan proyek Anda.
Anda mungkin juga membutuhkan Microsoft.Bcl. AsyncInterfacesIAsyncEnumerable
Kode lengkap
Bagian ini menunjukkan referensi yang relevan dan kode lengkap untuk contoh ini.
NuGet paket:
Elemen pemrograman:
using System; using System.Threading.Tasks; using Amazon.CloudWatchLogs; using Amazon.CloudWatchLogs.Model; namespace CWGetLogGroups { class Program { // A small limit for demonstration purposes private const int LogGroupLimit = 3; // // Main method static async Task Main(string[] args) { var cwClient = new AmazonCloudWatchLogsClient(); await DisplayLogGroupsWithoutPaginators(cwClient); await DisplayLogGroupsWithPaginators(cwClient); } // // Method to get CloudWatch log groups without paginators private static async Task DisplayLogGroupsWithoutPaginators(IAmazonCloudWatchLogs cwClient) { Console.WriteLine("\nGetting list of CloudWatch log groups without using paginators..."); Console.WriteLine("------------------------------------------------------------------"); // Loop as many times as needed to get all the log groups var request = new DescribeLogGroupsRequest{Limit = LogGroupLimit}; do { Console.WriteLine($"Getting up to {LogGroupLimit} log groups..."); DescribeLogGroupsResponse response = await cwClient.DescribeLogGroupsAsync(request); foreach(LogGroup logGroup in response.LogGroups) { Console.WriteLine($"{logGroup.LogGroupName}"); } request.NextToken = response.NextToken; } while(!string.IsNullOrEmpty(request.NextToken)); } // // Method to get CloudWatch log groups by using paginators private static async Task DisplayLogGroupsWithPaginators(IAmazonCloudWatchLogs cwClient) { Console.WriteLine("\nGetting list of CloudWatch log groups by using paginators..."); Console.WriteLine("-------------------------------------------------------------"); // Access the key results; i.e., the log groups // No need to loop to get all the log groups--the SDK does it for us behind the scenes Console.WriteLine("\nFrom the key results..."); Console.WriteLine("------------------------"); IDescribeLogGroupsPaginator paginatorForLogGroups = cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest()); await foreach(LogGroup logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); } // Access the full response // Create a new paginator, do NOT reuse the one from above Console.WriteLine("\nFrom the full response..."); Console.WriteLine("--------------------------"); IDescribeLogGroupsPaginator paginatorForResponses = cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest()); await foreach(DescribeLogGroupsResponse response in paginatorForResponses.Responses) { Console.WriteLine($"Content length: {response.ContentLength}"); Console.WriteLine($"HTTP result: {response.HttpStatusCode}"); Console.WriteLine($"Metadata: {response.ResponseMetadata}"); Console.WriteLine("Log groups:"); foreach(LogGroup logGroup in response.LogGroups) { Console.WriteLine($"\t{logGroup.LogGroupName}"); } } } } }
Pertimbangan tambahan untuk paginator
-
Paginator tidak dapat digunakan lebih dari sekali
Jika Anda membutuhkan hasil AWS paginator tertentu di beberapa lokasi dalam kode Anda, Anda tidak boleh menggunakan objek paginator lebih dari sekali. Sebagai gantinya, buat paginator baru setiap kali Anda membutuhkannya. Konsep ini ditunjukkan dalam contoh kode sebelumnya dalam metode.
DisplayLogGroupsWithPaginators
-
pagination sinkron
Pagination sinkron tersedia untuk. NETFramework 4.7.2 (atau yang lebih baru) proyek.
Awas
Mulai 15 Agustus 2024, dukungan AWS SDK for .NET akan berakhir untuk. NETFramework 3.5 dan akan mengubah minimum. NETVersi kerangka ke 4.7.2. Untuk informasi lebih lanjut, lihat posting blog Perubahan penting yang akan datang. NETFramework 3.5 dan 4.5 target dari AWS SDK for .NET
. Untuk melihat ini, buat. NETProyek Framework 4.7.2 (atau yang lebih baru) dan salin kode sebelumnya ke sana. Kemudian cukup hapus
await
kata kunci dari dua panggilanforeach
paginator, seperti yang ditunjukkan pada contoh berikut./*await*/ foreach(var logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); }
Bangun dan jalankan proyek untuk melihat hasil yang sama yang Anda lihat dengan pagination asinkron.