Transaction.DependentClone(DependentCloneOption) Metoda

Definicja

Tworzy zależny klon transakcji.

C#
public System.Transactions.DependentTransaction DependentClone (System.Transactions.DependentCloneOption cloneOption);
C#
public System.Transactions.DependentTransaction DependentClone (System.Transactions.DependentCloneOption option);

Parametry

cloneOptionoption
DependentCloneOption

Element DependentCloneOption , który kontroluje rodzaj transakcji zależnej do utworzenia.

Zwraca

DependentTransaction

Element DependentTransaction reprezentujący klon zależny.

Przykłady

W poniższym przykładzie pokazano, jak utworzyć transakcję zależną.

C#
static void Main(string[] args)
{
    try
    {
        using (TransactionScope scope = new TransactionScope())
        {
            // Perform transactional work here.

            //Queue work item
            ThreadPool.QueueUserWorkItem(new WaitCallback(WorkerThread), Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete));

            //Display transaction information
            Console.WriteLine("Transaction information:");
            Console.WriteLine("ID:             {0}", Transaction.Current.TransactionInformation.LocalIdentifier);
            Console.WriteLine("status:         {0}", Transaction.Current.TransactionInformation.Status);
            Console.WriteLine("isolationlevel: {0}", Transaction.Current.IsolationLevel);

            //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'))
                {
                    //Call complete on the scope
                    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;
    }
}

private static void WorkerThread(object transaction)
{
    //Create a DependentTransaction from the object passed to the WorkerThread
    DependentTransaction dTx = (DependentTransaction)transaction;

    //Sleep for 1 second to force the worker thread to delay
    Thread.Sleep(1000);

    //Pass the DependentTransaction to the scope, so that work done in the scope becomes part of the transaction passed to the worker thread
    using (TransactionScope ts = new TransactionScope(dTx))
    {
        //Perform transactional work here.

        //Call complete on the transaction scope
        ts.Complete();
    }

    //Call complete on the dependent transaction
    dTx.Complete();
}

Uwagi

Transakcja zależna to transakcja, której wynik zależy od wyniku transakcji, z której została sklonowana.

Parametr cloneoption określa rodzaj transakcji zależnej do utworzenia. Jeśli transakcja zależna zostanie utworzona za pomocą BlockCommitUntilCompletepolecenia , blokuje proces zatwierdzania transakcji do czasu wygaśnięcia transakcji lub Complete jest wywoływany w obiekcie DependentTransaction. Jeśli jest on tworzony za pomocą polecenia RollbackIfNotComplete, automatycznie przerywa transakcję, jeśli Commit jest wywoływana przed Complete wywołaniem w obiekcie DependentTransaction.

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.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
.NET Standard 2.0, 2.1

Zobacz też