Dil

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 kayıtlı olan 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 listelemeler işlem sonucuna oy verdikten ve TransactionManager işlemi işlemeye veya iptal etmeye karar verdikten 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.

bu yöntem, işlem işleminin ilk aşaması tamamlanana kadar engellediğ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ı kullanıcı arabirimi 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 senaryomuzda kullanıcı arabirimi iş parçacığı da çalışan iş parçacığının işlemi işlemesini bekliyor. Sonuç, hiçbirinin devam edebilmesi ve kapsamın Commit'in bitmesini süresiz olarak beklemesidir. Zaman uyumsuz olduğundan ve bu nedenle kilitlenmeye daha az eğilimli olduğundan, mümkün olan her yerde yerine BeginInvoke kullanmalısınızInvoke.

Şunlara uygulanır