語言

CommittableTransaction.Commit 方法

定義

嘗試提交交易。

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

例外狀況

Commit() 在交易中被呼叫,交易變為 InDoubt。

Commit() 被呼叫,交易首次回滾。

備註

當呼叫此方法時,所有已註冊參與交易的物件都會被輪詢,並可獨立表示是否投票決定提交或回滾交易。 若有參與者投票回滾交易,該交易會被回滾,此方法會 TransactionException 拋出例外。 這是交易中的正常現象,你的程式碼應該能捕捉並處理這類異常。

Commit 並阻塞 EndCommit 直到交易處理的第一階段完成。 第一階段在交易中所有資源管理者與 enlistations 對交易結果投票,且 TransactionManager 持續決定承諾或中止交易後結束。 第二階段的處理總是非同步的。 因此,無法保證在未使用其他交易查看資料時,剛從特定交易中提交的資料會立即可用。

由於此方法會阻塞直到交易處理的第一階段完成,使用此方法時在 Windows 表單(WinForm)應用程式中使用時應非常小心,否則可能會發生死結。 如果你在一個 WinForm 控制事件中呼叫此方法(例如點擊按鈕),並用同步 Invoke 方法指示控制項執行某些 UI 任務(例如更換顏色),就會發生死結。 這是因為該 Invoke 方法是同步的,會阻塞工作執行緒直到 UI 執行緒完成工作。 然而,在我們的情境中,UI 執行緒同時也在等待工作執行緒提交交易。 結果是沒有人能繼續,望遠鏡無限期等待提交完成。 你應該用 BeginInvoke 而非 Invoke 盡可能用,因為它是非同步的,因此較不容易死結。

適用於