Je me demande s'il existe une manière simple de gérer une sorte de transaction en C#. Disons que nous avons deux propriétés et que nous aimerions mettre à jour leurs valeurs. Nous pourrions écrire :
A = GetA();
B = GetB();
Le problème est que si l'exception est levée lors de l'affectation de B, l'objet sera dans un état incohérent, car A a été mis à jour. Nous pouvons résoudre ce problème en stockant la valeur actuelle de A et en capturant une exception lors de l'affectation de B :
var tempA = A;
A = GetA(); // A is up to date
try { B = GetB(); } catch { A = tempA; } // B is up to date also or A is reverted
Même la solution ci-dessus n'est pas sûre parce que l'exception peut être levée lors de l'annulation de A, mais la question est de savoir s'il existe des mécanismes intégrés dans .NET qui simplifient de telles opérations ?
Je pourrais imaginer une déclaration comme celle qui suit :
transaction { A = GetA(); B = GetB(); }
Ou une construction de code comme :
Transaction.Enter();
A = GetA();
B = GetB();
Transaction.Leave();
Avant la transaction, l'état de la machine sera stocké et après la transaction, il sera rétabli en cas d'exception. Existe-t-il quelque chose de ce genre en .NET ?