Simples, basta utilizar um Try/Catch com as seguintes orientações:

  • O primeiro comando depois do Try deve ser o Utils.IniciaTransacao();
  • O ultimo comando antes do Catch deve ser o Utils.ConfirmaTransacao();
  • O primeiro comando depois do Catch deve ser o Utils.CancelaTransacao();


Desta forma, é garantido que outros comandos não irão impactar no fluxo de gestão das transações.


try
{
   Utils.IniciaTransacao();

   ...


   Utils.ConfirmaTransacao();
}
catch
{
   Utils.CancelaTransacao();

   ...

}