CommittableTransaction.Commit Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mencoba untuk melakukan transaksi.
public:
void Commit();
public void Commit ();
member this.Commit : unit -> unit
Public Sub Commit ()
Pengecualian
Commit() dipanggil dan transaksi digulung balik untuk pertama kalinya.
Keterangan
Ketika metode ini dipanggil, semua objek yang telah terdaftar untuk berpartisipasi dalam transaksi dijajaki dan dapat secara independen menunjukkan suara mereka untuk menerapkan atau mengembalikan transaksi. Jika ada peserta yang memilih untuk menggulung balik transaksi, transaksi akan digulung balik dan metode ini memberikan TransactionException pengecualian. Ini adalah kejadian normal untuk transaksi dan kode Anda harus menangkap dan memproses pengecualian tersebut.
Commit dan EndCommit blokir hingga fase pertama pemrosesan transaksi selesai. Fase pertama berakhir setelah semua manajer sumber daya dan pendaftaran dalam transaksi telah memilih hasil transaksi dan TransactionManager telah memutuskan untuk menerapkan atau membatalkan transaksi. Fase kedua pemrosesan selalu asinkron. Oleh karena itu, tidak ada jaminan bahwa data yang baru saja dilakukan dari dalam transaksi tertentu akan segera tersedia setelahnya ketika tidak menggunakan transaksi lain untuk melihat data ini.
Karena metode ini memblokir hingga fase pertama pemrosesan transaksi selesai, Anda harus sangat berhati-hati saat menggunakan metode ini dalam aplikasi Windows Form (WinForm), atau kebuntuan dapat terjadi. Jika Anda memanggil metode ini di dalam satu peristiwa Kontrol WinForm (misalnya, mengklik tombol), dan menggunakan metode sinkron Invoke untuk mengarahkan kontrol untuk melakukan beberapa tugas UI (misalnya, mengubah warna) di tengah pemrosesan transaksi, kebuntuan akan terjadi. Ini karena Invoke metode ini sinkron dan memblokir utas pekerja sampai utas UI menyelesaikan pekerjaannya. Namun, dalam skenario kami, utas UI juga menunggu utas pekerja melakukan transaksi. Hasilnya adalah bahwa tidak ada yang dapat melanjutkan dan cakupan menunggu tanpa batas waktu agar Penerapan selesai. Anda harus menggunakan BeginInvoke daripada Invoke sedapat mungkin, karena itu asinkron dan dengan demikian kurang rentan terhadap kebuntuan.