Transaction.TransactionCompleted Evento

Definizione

Indica che la transazione è stata completata.

public event System.Transactions.TransactionCompletedEventHandler? TransactionCompleted;
public event System.Transactions.TransactionCompletedEventHandler TransactionCompleted;

Tipo evento

Eccezioni

Tentativo di sottoscrivere questo evento in una transazione che è stata eliminata.

Esempio

L'esempio seguente illustra come un'applicazione può ottenere il risultato di una transazione sottoscrivendo l'evento TransactionCompleted .

static void Main(string[] args)
{
    try
    {
        //Create the transaction scope
        using (TransactionScope scope = new TransactionScope())
        {
            //Register for the transaction completed event for the current transaction
            Transaction.Current.TransactionCompleted += new TransactionCompletedEventHandler(Current_TransactionCompleted);

            //Call complete on the TransactionScope based on console input
            ConsoleKeyInfo c;
            while (true)
            {
                Console.Write("Complete the transaction scope? [Y|N] ");
                c = Console.ReadKey();
                Console.WriteLine();

                if ((c.KeyChar == 'Y') || (c.KeyChar == 'y'))
                {
                    scope.Complete();
                    break;
                }
                else if ((c.KeyChar == 'N') || (c.KeyChar == 'n'))
                {
                    break;
                }
            }
        }
    }
    catch (System.Transactions.TransactionException ex)
    {
        Console.WriteLine(ex);
    }
    catch
    {
        Console.WriteLine("Cannot complete transaction");
        throw;
    }
}

//Transaction completed event handler
static void Current_TransactionCompleted(object sender, TransactionEventArgs e)
{
    Console.WriteLine("A transaction has completed:");
    Console.WriteLine("ID:             {0}", e.Transaction.TransactionInformation.LocalIdentifier);
    Console.WriteLine("Distributed ID: {0}", e.Transaction.TransactionInformation.DistributedIdentifier);
    Console.WriteLine("Status:         {0}", e.Transaction.TransactionInformation.Status);
    Console.WriteLine("IsolationLevel: {0}", e.Transaction.IsolationLevel);
}

Commenti

È possibile registrarsi per questo evento anziché usare un'integrazione volatile per ottenere informazioni sui risultati per le transazioni. Il parametro passato al delegato è un'istanza TransactionCompletedEventHandlerTransaction di . È quindi possibile eseguire una query sulla TransactionInformation proprietà dell'istanza specifica per ottenere un'istanza di TransactionInformation, la cui Status proprietà contiene lo stato di una transazione con il Committed valore o Aborted .

Attenzione L'iscrizione a questo evento influisce negativamente sulle prestazioni della transazione a cui è collegata.

Si applica a

Prodotto Versioni
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1