Partager via


CommittableTransaction.Commit Méthode

Définition

Essaie de valider la transaction.

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

Exceptions

Commit() est appelé sur une transaction et la transaction devient InDoubt.

Commit() est appelé et la transaction est restaurée pour la première fois.

Remarques

Lorsque cette méthode est appelée, tous les objets inscrits pour participer à la transaction sont interrogés et peuvent indiquer indépendamment leur vote pour valider ou restaurer la transaction. Si un participant vote pour restaurer la transaction, il est restauré et cette méthode lève une TransactionException exception. Il s’agit d’une occurrence normale d’une transaction et votre code doit intercepter et traiter ces exceptions.

Commit et EndCommit bloquer jusqu’à la fin de la première phase du traitement des transactions. La première phase se termine après que tous les gestionnaires de ressources et les inscriptions dans la transaction ont voté sur le résultat de la transaction et que la TransactionManager transaction a décidé durablement de valider ou d’abandonner la transaction. La deuxième phase de traitement est toujours asynchrone. Par conséquent, il n’existe aucune garantie que les données juste validées à partir d’une transaction donnée seront immédiatement disponibles après lors de l’utilisation d’une autre transaction pour afficher ces données.

Étant donné que cette méthode bloque jusqu’à la fin de la première phase du traitement des transactions, vous devez être extrêmement prudent lorsque vous utilisez cette méthode dans une application Windows Form (WinForm), ou un interblocage peut se produire. Si vous appelez cette méthode à l’intérieur d’un événement WinForm Control (par exemple, en cliquant sur un bouton) et que vous utilisez la méthode synchrone Invoke pour diriger le contrôle pour effectuer certaines tâches d’interface utilisateur (par exemple, modifier des couleurs) au milieu du traitement de la transaction, un interblocage se produit. En effet, la Invoke méthode est synchrone et bloque le thread de travail jusqu’à ce que le thread d’interface utilisateur termine son travail. Toutefois, dans notre scénario, le thread d’interface utilisateur attend également que le thread de travail valide la transaction. Le résultat est qu’aucun n’est en mesure de continuer et que l’étendue attend indéfiniment que la validation se termine. Vous devez utiliser BeginInvoke plutôt que Invoke dans la mesure du possible, car il est asynchrone et donc moins susceptible d’interblocage.

S’applique à