CommittableTransaction.Commit Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Probeert de transactie door te voeren.
public:
void Commit();
public void Commit();
member this.Commit : unit -> unit
Public Sub Commit ()
Uitzonderingen
Commit() wordt aangeroepen en de transactie wordt voor het eerst teruggedraaid.
Opmerkingen
Wanneer deze methode wordt aangeroepen, worden alle objecten die zijn geregistreerd om deel te nemen aan de transactie gepeild en kunnen ze onafhankelijk aangeven dat ze de transactie doorvoeren of terugdraaien. Als deelnemers stemmen om de transactie terug te draaien, wordt deze teruggedraaid en wordt deze methode een TransactionException uitzondering gegenereerd. Dit is een normale gebeurtenis voor een transactie en uw code moet dergelijke uitzonderingen ondervangen en verwerken.
Commit en EndCommit blokkeren totdat de eerste fase van transactieverwerking is voltooid. De eerste fase eindigt nadat alle resourcemanagers en inlistingen in de transactie hebben gestemd over het transactieresultaat en het TransactionManager heeft definitief besloten om de transactie vast te leggen of af te breken. De tweede fase van de verwerking is altijd asynchroon. Daarom is er geen garantie dat gegevens die alleen vanuit een bepaalde transactie zijn vastgelegd, onmiddellijk daarna beschikbaar zijn wanneer ze geen andere transactie gebruiken om deze gegevens weer te geven.
Omdat deze methode wordt geblokkeerd totdat de eerste fase van transactieverwerking is voltooid, moet u uiterst voorzichtig zijn bij het gebruik van deze methode in een Windows Formulier-toepassing (WinForm) of kan er een impasse optreden. Als u deze methode aanroept binnen één WinForm-besturingselementgebeurtenis (bijvoorbeeld op een knop klikken) en de synchrone Invoke methode gebruikt om het besturingselement te leiden om bepaalde UI-taken uit te voeren (bijvoorbeeld kleuren wijzigen) in het midden van de verwerking van de transactie, gebeurt er een impasse. Dit komt doordat de Invoke methode synchroon is en de werkrolthread blokkeert totdat de ui-thread de taak heeft voltooid. In ons scenario wacht de UI-thread echter ook totdat de werkrolthread de transactie doorvoert. Het resultaat is dat er geen kan worden voortgezet en dat het bereik voor onbepaalde tijd wacht totdat de doorvoer is voltooid. U moet BeginInvoke gebruiken in plaats Invoke van waar mogelijk, omdat het asynchroon is en dus minder gevoelig is voor impasses.