Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operasi asinkron yang menggunakan IAsyncResult pola desain diimplementasikan sebagai dua metode bernama BeginOperationName dan EndOperationName yang masing-masing memulai dan mengakhiri operasi asinkron OperationName . Misalnya, FileStream menyediakan metode BeginRead dan EndRead untuk membaca byte secara asinkron dari file. Metode ini mengimplementasikan versi asinkron metode Read .
Nota
Dimulai dengan .NET Framework 4, Pustaka Paralel Tugas menyediakan model baru untuk pemrograman asinkron dan paralel. Untuk informasi selengkapnya, lihat Pustaka Paralel Tugas (TPL) dan Pola Asinkron Berbasis Tugas (TAP)).
Setelah memanggil BeginOperationName, aplikasi dapat terus menjalankan instruksi pada utas panggilan sementara operasi asinkron berlangsung pada utas yang berbeda. Untuk setiap panggilan ke BeginOperationName, aplikasi juga harus memanggil EndOperationName untuk mendapatkan hasil operasi.
Memulai Operasi Asinkron
Metode ini BeginOperationName memulai operasi asinkron OperationName dan mengembalikan objek yang mengimplementasikan IAsyncResult antarmuka.
IAsyncResult objek menyimpan informasi tentang operasi asinkron. Tabel berikut ini memperlihatkan informasi tentang operasi asinkron.
| Anggota | Deskripsi |
|---|---|
| AsyncState | Objek khusus aplikasi opsional yang berisi informasi tentang operasi asinkron. |
| AsyncWaitHandle | Yang WaitHandle dapat digunakan untuk memblokir eksekusi aplikasi sampai operasi asinkron selesai. |
| CompletedSynchronously | Nilai yang menunjukkan apakah operasi asinkron selesai pada utas yang digunakan untuk memanggil BeginOperationName alih-alih menyelesaikan pada utas terpisah ThreadPool . |
| IsCompleted | Nilai yang menunjukkan apakah operasi asinkron telah selesai. |
Metode BeginOperationName menerima parameter apa pun yang dideklarasikan dalam tanda tangan versi sinkron dari metode yang diberikan berdasarkan nilai atau referensi. Parameter keluaran mana pun bukan bagian dari deklarasi metode BeginOperationName. Tanda tangan metode BeginOperationName juga mengandung dua parameter tambahan. Yang pertama mendefinisikan AsyncCallback delegasi yang mereferensikan metode yang dipanggil ketika operasi asinkron selesai. Pemanggil dapat menentukan null (Nothing di Visual Basic) jika tidak ingin metode dipanggil saat operasi selesai. Parameter tambahan kedua adalah objek yang ditentukan pengguna. Objek ini dapat digunakan untuk meneruskan informasi status khusus aplikasi ke metode yang dipanggil ketika operasi asinkron selesai.
BeginOperationName Jika metode membutuhkan parameter tambahan khusus operasi, seperti array byte untuk menyimpan byte yang dibaca dari file, AsyncCallback bersama dengan objek status aplikasi menjadi parameter terakhir dalam BeginOperationName tanda tangan metode.
BeginOperationName mengembalikan kontrol ke utas panggilan segera.
BeginOperationName Jika metode melemparkan pengecualian, pengecualian dilemparkan sebelum operasi asinkron dimulai.
BeginOperationName Jika metode melemparkan pengecualian, metode panggilan balik tidak dipanggil.
Mengakhiri Operasi Asinkron
Metode EndOperationName ini mengakhiri operasi asinkron OperationName. Nilai pengembalian metode EndOperationName adalah jenis yang sama dengan rekan sinkronnya dan terkait dengan operasi asinkron. Misalnya, metode EndRead mengembalikan jumlah byte yang dibaca dari FileStream, dan metode EndGetHostByName mengembalikan objek IPHostEntry yang mencakup informasi tentang komputer host. Metode EndOperationName ini menerima parameter keluaran atau ref yang dideklarasikan dalam signature versi metode yang sinkron. Selain parameter dari metode sinkron, metode ini EndOperationName juga menyertakan IAsyncResult parameter. Pemanggil harus meneruskan instans yang dikembalikan oleh panggilan yang sesuai ke BeginOperationName.
Jika operasi asinkron yang diwakili oleh IAsyncResult objek belum selesai ketika EndOperationName dipanggil, EndOperationName blokir utas panggilan hingga operasi asinkron selesai. Pengecualian yang dilemparkan oleh operasi asinkron dilemparkan dari metode EndOperationName. Efek memanggil metode EndOperationName beberapa kali dengan IAsyncResult yang sama tidak didefinisikan. Demikian juga, metode EndOperationName dipanggil dengan IAsyncResult yang tidak dikembalikan oleh metode Begin terkait juga tidak didefinisikan.
Nota
Untuk salah satu skenario yang tidak terdefinisi, pelaksana harus mempertimbangkan untuk melemparkan InvalidOperationException.
Nota
Pelaksana pola desain ini harus memberi tahu pemanggil bahwa operasi asinkron diselesaikan dengan mengatur IsCompleted ke true, memanggil metode panggilan balik asinkron (jika ditentukan) dan menandakan AsyncWaitHandle.
Pengembang aplikasi memiliki beberapa pilihan desain untuk mengakses hasil operasi asinkron. Pilihan yang benar tergantung pada apakah aplikasi memiliki instruksi yang dapat dijalankan saat operasi selesai. Jika aplikasi tidak dapat melakukan pekerjaan tambahan hingga menerima hasil operasi asinkron, aplikasi harus memblokir hingga hasilnya tersedia. Untuk memblokir hingga operasi asinkron selesai, Anda dapat menggunakan salah satu pendekatan berikut:
Panggil
EndOperationNamedari utas utama aplikasi, memblokir eksekusi aplikasi hingga operasi selesai. Untuk contoh yang mengilustrasikan teknik ini, lihat Memblokir Eksekusi Aplikasi dengan Mengakhiri Operasi Asinkron.AsyncWaitHandle Gunakan untuk memblokir eksekusi aplikasi hingga satu atau beberapa operasi selesai. Untuk contoh yang mengilustrasikan teknik ini, lihat Memblokir Eksekusi Aplikasi Menggunakan AsyncWaitHandle.
Aplikasi yang tidak perlu memblokir sementara operasi asinkron selesai dapat menggunakan salah satu pendekatan berikut:
Periksa status penyelesaian operasi dengan memeriksa properti IsCompleted secara berkala dan memanggil
EndOperationNameketika operasi selesai. Untuk contoh yang mengilustrasikan teknik ini, lihat Polling untuk Status Operasi Asinkron.AsyncCallback Gunakan delegasi untuk menentukan metode yang akan dipanggil saat operasi selesai. Untuk contoh yang mengilustrasikan teknik ini, lihat Menggunakan Delegasi AsyncCallback untuk Mengakhiri Operasi Asinkron.
Lihat juga
- Pola Asinkron Berbasis Peristiwa (EAP)
- Memanggil Metode Sinkron Secara Asinkron
- Menggunakan Delegasi AsyncCallback dan Objek Status