Membatalkan Panggilan Metode
Dengan diperkenalkannya aplikasi terdistribusi dan berbasis Web, beberapa panggilan metode dapat memakan waktu lama untuk kembali. Latensi koneksi jaringan mungkin tinggi, komputer server mungkin melayani banyak klien, atau komponen server mungkin melewati sejumlah besar data, seperti file multimedia. Pengguna harus dapat membatalkan permintaan yang memakan waktu terlalu lama, dan aplikasi harus dapat menangani permintaan pembatalan dan melanjutkan pekerjaan lainnya. Di COM, Anda dapat menggunakan antarmuka IMessageFilter untuk membatalkan panggilan tertunda yang berasal dari apartemen berulir tunggal.
Saat panggilan di-marshal, proksi membuat objek pembatalan, yang mengimplementasikan antarmuka ICancelMethodCalls . Objek pembatalan dikaitkan dengan panggilan dan utas tempat panggilan tertunda.
Untuk membatalkan panggilan yang tertunda, klien meneruskan permintaan pembatalan melalui objek pembatalan, yang menangani detail memberi tahu objek server bahwa panggilan telah dibatalkan. Jika metode yang dipanggil belum dikembalikan, objek server, pada mendeteksi permintaan pembatalan, membersihkan sumber daya program apa pun yang telah dialokasikan dan memberi tahu kliennya, dengan mengembalikan nilai HRESULT yang sesuai, bahwa ia membatalkan eksekusi panggilan. Jika metode yang dipanggil telah dikembalikan, objek pembatalan akan memberi tahu klien. Dalam kedua kasus, utas klien tidak diblokir dan dapat terus diproses.
Bagaimana objek server merespons permintaan pembatalan atas kebijakan pelaksana server, tetapi utas panggilan pada klien akan selalu tidak diblokir dan akan mengabaikan hasil apa pun yang coba diteruskan server ke dalamnya. Batalkan objek menyediakan sarana untuk meminta agar metode yang sedang berjalan dibatalkan, tetapi tidak ada jaminan bahwa objek server akan berhenti memproses panggilan. Misalnya, panggilan mungkin telah dikembalikan, atau objek server mungkin tidak mendukung objek pembatalan.
COM secara otomatis menyediakan implementasi standar objek pembatalan untuk objek klien dan antarmuka yang menggunakan marshaling standar. Untuk objek dan antarmuka yang menggunakan marshaling kustom, Anda harus menerapkan objek pembatalan Anda sendiri.
Saat ini, batalkan objek hanya menangani panggilan sinkron.
Topik terkait