Bagikan melalui


CommittableTransaction.Commit Metode

Definisi

Mencoba untuk melakukan transaksi.

public:
 void Commit();
public void Commit ();
member this.Commit : unit -> unit
Public Sub Commit ()

Pengecualian

Commit() dipanggil pada transaksi dan transaksi menjadi InDoubt.

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.

Berlaku untuk