CommittableTransaction.Commit Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Tenta di eseguire il commit della transazione.
public:
void Commit();
public void Commit();
member this.Commit : unit -> unit
Public Sub Commit ()
Eccezioni
Commit() viene chiamato e viene eseguito il rollback della transazione per la prima volta.
Commenti
Quando questo metodo viene chiamato, vengono chiamato tutti gli oggetti registrati per partecipare alla transazione e possono indicare in modo indipendente il proprio voto per eseguire il commit o il rollback della transazione. Se un partecipante vota per eseguire il rollback della transazione, viene eseguito il rollback e questo metodo genera un'eccezione TransactionException . Si tratta di una normale occorrenza per una transazione e il codice deve intercettare ed elaborare tali eccezioni.
Commit e EndCommit bloccano fino al completamento della prima fase di elaborazione delle transazioni. La prima fase termina dopo che tutti i gestori risorse e gli inserimenti nella transazione hanno votato sul risultato della transazione e ha TransactionManager deciso duramente di eseguire il commit o interrompere la transazione. La seconda fase di elaborazione è sempre asincrona. Pertanto, non esiste alcuna garanzia che i dati appena sottoposti a commit dall'interno di una determinata transazione saranno immediatamente disponibili in seguito quando non si usa un'altra transazione per visualizzare questi dati.
Poiché questo metodo si blocca fino al completamento della prima fase dell'elaborazione delle transazioni, è consigliabile prestare particolare attenzione quando si usa questo metodo in un'applicazione Form (WinForm) Windows oppure può verificarsi un deadlock. Se chiami questo metodo all'interno di un evento WinForm Control (ad esempio, facendo clic su un pulsante) e usa il metodo sincrono Invoke per indirizzare il controllo a eseguire alcune attività dell'interfaccia utente (ad esempio, modificando i colori) al centro dell'elaborazione della transazione, si verificherà un deadlock. Questo avviene perché il Invoke metodo è sincrono e blocca il thread di lavoro fino al termine del processo del thread dell'interfaccia utente. In questo scenario, tuttavia, il thread dell'interfaccia utente è anche in attesa del commit della transazione da parte del thread di lavoro. Il risultato è che nessuno è in grado di procedere e l'ambito attende indefinitamente il completamento del commit. È consigliabile usare BeginInvoke anziché Invoke laddove possibile, perché è asincrono e quindi meno soggetto a deadlock.