CommittableTransaction.Commit 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
尝试提交事务。
public:
void Commit();
public void Commit();
member this.Commit : unit -> unit
Public Sub Commit ()
例外
Commit() 调用 并首次回滚事务。
注解
调用此方法时,将轮询已注册参与事务的所有对象,并且可以独立指示其投票以提交或回滚事务。 如果任何参与者投票回退事务,则会回滚该事务,此方法将引发 TransactionException 异常。 这是事务的正常情况,代码应捕获和处理此类异常。
Commit 并 EndCommit 阻止,直到事务处理的第一阶段完成。 第一阶段在事务中的所有资源管理器和登记都投票决定事务结果后结束, TransactionManager 并且已持续决定提交或中止事务。 第二阶段的处理始终是异步的。 因此,在不使用另一个事务查看此数据时,无法保证刚从给定事务内提交的数据将立即可用。
由于此方法在事务处理的第一阶段完成之前会阻止,因此在 Windows Form (WinForm) 应用程序中使用此方法时,应非常小心,否则会发生死锁。 如果在一个 WinForm 控件事件(例如单击按钮)内调用此方法,并使用同步 Invoke 方法指示控件执行某些 UI 任务(例如,更改颜色)在处理事务过程中,将发生死锁。 这是因为 Invoke 该方法是同步的,并阻止工作线程,直到 UI 线程完成其作业。 但是,在我们的方案中,UI 线程也在等待工作线程提交事务。 结果是,没有一个能够继续,范围会无限期地等待提交完成。 应尽可能使用,而不是尽可能使用BeginInvokeInvoke,因为它是异步的,因此不太容易死锁。