Bagikan melalui


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:

Aplikasi yang tidak perlu memblokir saat operasi asinkron selesai dapat menggunakan salah satu pendekatan berikut:

Lihat juga