La Compréhension TransactionScopeOptions: RequiresNew = Supprimer + Requis?
Je crois que je comprends TransactionScopeOption.Suppress
et TransactionScopeOption.Required
mais j'ai du mal à comprendre ce que TransactionScopeOption.RequiresNew
. Basé sur la dernière explication que j'ai lu, la suite de deux blocs de code fonctionnellement être le même? Est-ce une représentation précise de ce que RequiresNew
signifie?
using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
DoStuff();
ts1.Complete();
}
et
using (var ts2 = new TransactionScope(TransactionScopeOptions.Suppress))
{
using (var ts3 = new TransactionScope())
{
DoStuff();
ts3.Complete();
}
ts2.Complete(); //not required but recommended for consistency's sake
}
OriginalL'auteur Jaxidian | 2011-08-08
Vous devez vous connecter pour publier un commentaire.
Pour obtenir une bonne compréhension de la transaction étendues que vous pouvez lire cet article msdn
Je ne peux pas trouver une bonne explication comment ces deux serait différent, sauf que le nombre de imbriquée étendues qui sont créés sont différents. Deux cas doivent conduire à la même quantité de transactions, peu importe si une transaction existe déjà ou pas. Je ne peux pas trouver une bonne ressource à consulter, mais je serais toujours aller pour RequiresNew sur un combiné Supprimer/Nécessaire. RequiresNew signifie en gros: "peu importe si il y en a déjà qui est ou n'est pas une transaction de me donner une nouvelle".
Mise à jour:
Dans le cas où le premier lien reste cassé, vous pouvez le trouver dans l'archive wayback ici
RequiresNew
: le code contenu dépend d'une transaction, mais doit être indépendamment validée ou annulée.Suppress
: le code contenu effectue sa propre rémunération, de sorte que ne doivent pas faire partie d'une transaction." Cela signifie (pour moi) "s'engager" ou "retour en arrière" un RequiresNew TransactionScope ne peuvent pas être manipulés ou dépendant de l'extérieur de la transaction ni l'un affecte l'autre. C'est ce que l'Supprimer doit faire à son intérieur Nécessaire TransactionScope.En toute honnêteté, j'ai mal lu votre deuxième bloc de code et pensé que vous aviez 2 imbriquée transactionscopes() (j'ai raté le Supprimer sur l'extérieur). Je vais modifier
Et juste pour préciser... Si je la restauration de la RequiresNew transaction, n'affecte en aucune manière un parent TransactionScope, et de même, si je la restauration d'un parent TransactionScope, qui n'affecte en aucune manière la RequiresNew transaction? Désolé, je veux juste m'assurer de comprendre ces options. Beaucoup de potentiellement des effets secondaires désagréables (blocage, non-atomique, etc) si je reçois ces mélangées!
Le premier lien vers le blog d'entrée est cassée.
OriginalL'auteur Eddy