CommittableTransaction.Commit Yöntem

Tanım

İşlemi işlemeye çalışır.

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

Özel durumlar

Commit() bir işlemde çağrılır ve işlem olur InDoubt.

Commit() çağrılır ve işlem ilk kez geri alınır.

Açıklamalar

Bu yöntem çağrıldığında, işleme katılmak için kaydolan tüm nesneler yoklanır ve işlemi işleme veya geri alma oylarını bağımsız olarak gösterebilir. Herhangi bir katılımcı işlemi geri almak için oy verirse geri alınır ve bu yöntem bir TransactionException özel durum oluşturur. Bu işlem için normal bir durumdur ve kodunuz bu tür özel durumları yakalamalı ve işlemelidir.

Commit ve EndCommit işlem işleminin ilk aşaması tamamlanana kadar engelleyin. İlk aşama, işlemdeki tüm kaynak yöneticileri ve listelerinin işlem sonucuna oy vermesine ve TransactionManager işlemin işlenmesine veya durdurulmaya karar vermesine neden olduktan sonra sona erer. İşlemenin ikinci aşaması her zaman zaman uyumsuzdur. Bu nedenle, bu verileri görüntülemek için başka bir işlem kullanmadığınızda yalnızca belirli bir işlem içinden işlenen verilerin hemen kullanılabilir olacağının garantisi yoktur.

İşlem işleminin ilk aşaması tamamlanana kadar bu yöntem engellendiğinden, bu yöntemi bir Windows Form (WinForm) uygulamasında kullanırken son derece dikkatli olmanız gerekir, aksi halde kilitlenme oluşabilir. Bu yöntemi tek bir WinForm Denetimi olayında çağırırsanız (örneğin, bir düğmeye tıklarsanız) ve denetimi işlemi işlemenin ortasında bazı ui görevlerini (örneğin, renkleri değiştirme) gerçekleştirmeye yönlendirmek için zaman uyumlu Invoke yöntemini kullanırsanız, kilitlenme oluşur. Bunun nedeni Invoke yönteminin zaman uyumlu olması ve kullanıcı arabirimi iş parçacığı işini bitirene kadar çalışan iş parçacığını engellemesidir. Ancak bizim senaryomuzda kullanıcı arabirimi iş parçacığı da çalışan iş parçacığının işlemi işlemesini bekliyor. Sonuç olarak hiçbiri devam edemeyebilir ve işlemenin bitmesini süresiz olarak bekler. Zaman uyumsuz olduğundan ve bu nedenle kilitlenmeye daha az eğilimli olduğundan, mümkün olan her yerde kullanmak yerine Invoke kullanmanız BeginInvoke gerekir.

Şunlara uygulanır