View a markdown version of this page

Pemrograman secara asinkron menggunakan AWS SDK untuk .NET - AWS SDK untuk .NET (V4)

Versi 4 (V4) AWS SDK untuk .NET telah dirilis!

Untuk informasi tentang mengubah perubahan dan memigrasikan aplikasi Anda, lihat topik https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html migrasi.

Orange button with text "Click here for details".

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pemrograman secara asinkron menggunakan AWS SDK untuk .NET

Menggunakan AWS SDK untuk .NET Pola Task-based Asynchronous (TAP) untuk implementasi asinkronnya. Untuk mempelajari lebih lanjut tentang TAP, lihat Pola Task-based Asinkron (TAP) di docs.microsoft.com.

Topik ini memberikan gambaran umum tentang cara menggunakan TAP dalam panggilan ke klien AWS layanan.

Metode asinkron dalam AWS SDK untuk .NET API adalah operasi berdasarkan Task kelas atau kelas. Task<TResult> <TResult>Lihat docs.microsoft.com untuk informasi tentang kelas ini: Kelas tugas, Kel https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task as tugas. https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1

Ketika metode API ini dipanggil dalam kode Anda, mereka harus dipanggil dalam fungsi yang dideklarasikan dengan async kata kunci, seperti yang ditunjukkan dalam contoh berikut.

static async Task Main(string[] args) { ... // Call the function that contains the asynchronous API method. // Could also call the asynchronous API method directly from Main // because Main is declared async var response = await ListBucketsAsync(); Console.WriteLine($"Number of buckets: {response.Buckets.Count}"); ... } // Async method to get a list of Amazon S3 buckets. private static async Task<ListBucketsResponse> ListBucketsAsync() { ... var response = await s3Client.ListBucketsAsync(); return response; }

Seperti yang ditunjukkan pada cuplikan kode sebelumnya, ruang lingkup yang disukai untuk async deklarasi adalah Main fungsi. Menyet async el cakupan ini memastikan bahwa semua panggilan ke klien AWS layanan harus asinkron. Jika Anda tidak dapat mendeklar Main asikan menjadi asinkron karena alasan tertentu, Anda dapat menggunakan async kata kunci pada fungsi selain Main dan kemudian memanggil metode API dari sana, seperti yang ditunjukkan pada contoh berikut.

static void Main(string[] args) { ... Task<ListBucketsResponse> response = ListBucketsAsync(); Console.WriteLine($"Number of buckets: {response.Result.Buckets.Count}"); ... } // Async method to get a list of Amazon S3 buckets. private static async Task<ListBucketsResponse> ListBucketsAsync() { ... var response = await s3Client.ListBucketsAsync(); return response; }

Perhatikan sin Task<> taks khusus yang diperlukan Main saat Anda menggunakan pola ini. Selain itu, Anda harus menggunakan Result anggota respons untuk mendapatkan data.

Awas

Memblokir pada panggilan asinkron denganResult,Wait(), atau GetAwaiter().GetResult() merupakan pola sin kronisasi over-asinkron. Ini hanya dapat diterima di konsol sederhana Main yang tidak memilikiSynchronizationContext. DalamASP.NET,,Windows Forms,WPF, danBlazor WebAssembly, pola ini dapat membuat kumpulan utas kelaparan atau kebuntuan. Salah satu hasil menyebabkan aplikasi Anda macet. Lebih suka mendeklarasikan Main sebagai async dan menggunakanawait, seperti yang ditunjukkan pada contoh pertama. Lihat perinciannya di Gunakan async/await dengan benar.

Anda dapat melihat contoh lengkap panggilan asinkron ke klien AWS layanan di Membuat aplikasi sederhana bagian (Aplikasi lintas platform sederhanadanAplikasi berbasis Windows sederhana) dan di. Contoh kode terpandu