Model Pemrograman Asinkron (APM)
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 kelas menyediakan metode BeginRead dan EndRead untuk membaca byte secara asinkron dari file. Metode ini mengimplementasikan versi asinkron Read metode.
Catatan
Dimulai dengan .NET Framework 4, Pustaka Paralel Tugas menyediakan model baru untuk pemrograman asinkron dan paralel. Untuk informasi selengkapnya, lihat Pustaka Paralel Tugas dan Pola Asinkron Berbasis Tugas.
Setelah memanggil BeginOperationName
, aplikasi dapat terus menjalankan instruksi pada alur panggilan sementara operasi asinkron berlangsung pada alur 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 | WaitHandle yang dapat digunakan untuk memblokir eksekusi aplikasi hingga operasi asinkron selesai. |
CompletedSynchronously | Nilai yang menunjukkan apakah operasi asinkron selesai pada alur yang digunakan untuk memanggil BeginOperationName bukan menyelesaikan pada alur terpisah ThreadPool. |
IsCompleted | Nilai yang menunjukkan apakah operasi asinkron telah selesai. |
Metode BeginOperationName
mengambil parameter apa pun yang dideklarasikan dalam tanda tangan versi sinkron metode yang diteruskan oleh nilai atau referensi. Setiap parameter keluar bukan bagian dari BeginOperationName
tanda tangan metode. Tanda tangan BeginOperationName
metode juga mencakup dua parameter tambahan. Yang pertama mendefinisikan AsyncCallback delegasi yang mereferensikan metode yang dipanggil ketika operasi asinkron selesai. Pemanggil dapat menentukan null
(Nothing
dalam 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. Jika BeginOperationName
metode mengambil parameter khusus operasi tambahan, seperti array byte untuk menyimpan byte yang dibaca dari file, AsyncCallback objek status aplikasi dan adalah parameter terakhir dalam BeginOperationName
tanda tangan metode.
BeginOperationName
mengembalikan kontrol ke alur panggilan segera. BeginOperationName
Jika metode tersebut melempar pengecualian, pengecualian dilemparkan sebelum operasi asinkron dimulai. BeginOperationName
Jika metode melempar pengecualian, metode panggilan balik tidak dipanggil.
Mengakhiri Operasi Asinkron
Metode EndOperationName
ini mengakhiri operasi asinkron OperationName. Nilai pengembalian EndOperationName
metode adalah jenis yang sama yang dikembalikan oleh rekan sinkronnya dan khusus untuk operasi asinkron. Misalnya, EndRead metode mengembalikan jumlah byte yang dibaca dari FileStream dan EndGetHostByName metode mengembalikan IPHostEntry objek yang berisi informasi tentang komputer host. Metode EndOperationName
mengeluarkan parameter atau ref yang dideklarasikan dalam tanda tangan versi sinkron metode. Selain parameter dari metode sinkron, metode ini EndOperationName
juga menyertakan IAsyncResult parameter. Penelepon 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 alur panggilan hingga operasi asinkron selesai. Pengecualian yang dilemparkan oleh operasi asinkron dilemparkan dari EndOperationName
metode. Efek memanggil EndOperationName
metode beberapa kali dengan yang sama IAsyncResult tidak didefinisikan. Demikian juga, memanggil EndOperationName
metode dengan IAsyncResult yang tidak dikembalikan oleh metode Begin terkait juga tidak ditentukan.
Catatan
Untuk salah satu skenario yang tidak terdefinisi, pelaksana harus mempertimbangkan untuk melemparkan InvalidOperationException.
Catatan
Pelaksana pola desain ini harus memberi tahu pemanggil bahwa operasi asinkron selesai dengan mengatur IsCompleted ke true, memanggil metode panggilan balik asinkron (jika ada yang 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
EndOperationName
dari alur utama aplikasi, memblokir eksekusi aplikasi hingga operasi selesai. Untuk contoh yang menggambarkan teknik ini, lihat Memblokir Eksekusi Aplikasi dengan Mengakhiri Operasi Asinkron.Gunakan AsyncWaitHandle untuk memblokir eksekusi aplikasi hingga satu atau beberapa operasi selesai. Untuk contoh yang menggambarkan teknik ini, lihat Memblokir Eksekusi Aplikasi dengan Mengakhiri Operasi Asinkron.
Aplikasi yang tidak perlu memblokir saat operasi asinkron selesai dapat menggunakan salah satu pendekatan berikut:
Polling untuk status penyelesaian operasi dengan memeriksa IsCompleted properti secara berkala dan memanggil
EndOperationName
ketika operasi selesai. Untuk contoh yang menggambarkan teknik ini, lihat Polling untuk Status Operasi Asinkron.AsyncCallback Gunakan delegasi untuk menentukan metode yang akan dipanggil saat operasi selesai. Untuk contoh yang menggambarkan teknik ini, lihat Menggunakan Delegasi AsyncCallback untuk Mengakhiri Operasi Asinkron.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk