Transaction.DependentClone(DependentCloneOption) Yöntem

Tanım

İşlemin bağımlı bir kopyasını oluşturur.

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

Parametreler

cloneOptionoption
DependentCloneOption

DependentCloneOption Ne tür bir bağımlı işlem oluşturulacağını denetleen bir.

Döndürülenler

DependentTransaction

DependentTransaction Bağımlı kopyayı temsil eden bir.

Örnekler

Aşağıdaki örnekte bağımlı bir işlemin nasıl oluşturulacağı gösterilmektedir.

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();
}

Açıklamalar

Bağımlı işlem, sonucu kopyalandığı işlemin sonucuna bağlı olan bir işlemdir.

cloneoption parametresi, ne tür bağımlı işlem oluşturulacağını denetler. ile BlockCommitUntilCompletebağımlı bir işlem oluşturulursa, işlem zaman aşımına uğradıktan veya Complete üzerinde DependentTransactionçağrılana kadar işlemin işleme işlemini engeller. ile RollbackIfNotCompleteoluşturulursa, üzerinde çağrılmadan önce Complete çağrılırsa Commit DependentTransactionişlemi otomatik olarak durdurur.

Şunlara uygulanır

Ürün Sürümler
.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

Ayrıca bkz.