Bagikan melalui


DependentTransaction Kelas

Definisi

Menjelaskan kloning transaksi yang memberikan jaminan bahwa transaksi tidak dapat dilakukan sampai aplikasi beristirahat mengenai pekerjaan pada transaksi. Kelas ini tidak dapat diwariskan.

public ref class DependentTransaction sealed : System::Transactions::Transaction
public sealed class DependentTransaction : System.Transactions.Transaction
[System.Serializable]
public sealed class DependentTransaction : System.Transactions.Transaction
type DependentTransaction = class
    inherit Transaction
[<System.Serializable>]
type DependentTransaction = class
    inherit Transaction
Public NotInheritable Class DependentTransaction
Inherits Transaction
Warisan
DependentTransaction
Atribut

Contoh

Contoh berikut menunjukkan cara membuat transaksi dependen.

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();
}
Public Shared Sub Main()
    Try
        Using scope As TransactionScope = New TransactionScope()

            'Perform transactional work here.

            'Queue work item
            ThreadPool.QueueUserWorkItem(AddressOf 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
            Dim c As ConsoleKeyInfo
            While (True)

                Console.Write("Complete the transaction scope? [Y|N] ")
                c = Console.ReadKey()
                Console.WriteLine()
                If (c.KeyChar = "Y") Or (c.KeyChar = "y") Then
                    scope.Complete()
                    Exit While
                ElseIf ((c.KeyChar = "N") Or (c.KeyChar = "n")) Then
                    Exit While
                End If
            End While
        End Using

    Catch ex As TransactionException
        Console.WriteLine(ex)
    Catch
        Console.WriteLine("Cannot complete transaction")
        Throw
    End Try
End Sub

Public Shared Sub WorkerThread(ByVal myTransaction As Object)

    'Create a DependentTransaction from the object passed to the WorkerThread
    Dim dTx As DependentTransaction
    dTx = CType(myTransaction, DependentTransaction)

    '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 ts As TransactionScope = New TransactionScope(dTx)
        'Perform transactional work here.

        'Call complete on the transaction scope
        ts.Complete()
    End Using

    'Call complete on the dependent transaction
    dTx.Complete()
End Sub

Keterangan

DependentTransaction adalah klon objek yang Transaction dibuat menggunakan DependentClone metode . Tujuannya adalah untuk memungkinkan aplikasi beristirahat dan menjamin bahwa transaksi tidak dapat dilakukan saat pekerjaan masih dilakukan pada transaksi (misalnya, pada utas pekerja).

Ketika pekerjaan yang dilakukan dalam transaksi kloning akhirnya selesai dan siap untuk dilakukan, itu dapat menginformasikan pembuat transaksi menggunakan Complete metode . Dengan demikian Anda dapat mempertahankan konsistensi dan kebenaran data.

DependentCloneOption Enumerasi digunakan untuk menentukan perilaku pada penerapan. Kontrol perilaku ini memungkinkan aplikasi untuk beristirahat, serta memberikan dukungan konkurensi. Untuk informasi selengkapnya tentang bagaimana enumerasi ini digunakan, lihat Mengelola Konkurensi dengan DependentTransaction.

Properti

IsolationLevel

Mendapatkan tingkat isolasi transaksi.

(Diperoleh dari Transaction)
PromoterType

Secara unik mengidentifikasi format yang byte[] dikembalikan oleh metode Promosikan saat transaksi dipromosikan.

(Diperoleh dari Transaction)
TransactionInformation

Mengambil informasi tambahan tentang transaksi.

(Diperoleh dari Transaction)

Metode

Clone()

Membuat klon transaksi.

(Diperoleh dari Transaction)
Complete()

Mencoba menyelesaikan transaksi dependen.

DependentClone(DependentCloneOption)

Membuat klon dependen dari transaksi.

(Diperoleh dari Transaction)
Dispose()

Melepaskan sumber daya yang dipegang oleh objek .

(Diperoleh dari Transaction)
EnlistDurable(Guid, IEnlistmentNotification, EnlistmentOptions)

Mendaftarkan manajer sumber daya tahan lama yang mendukung penerapan dua fase untuk berpartisipasi dalam transaksi.

(Diperoleh dari Transaction)
EnlistDurable(Guid, ISinglePhaseNotification, EnlistmentOptions)

Mendaftarkan manajer sumber daya tahan lama yang mendukung pengoptimalan penerapan fase tunggal untuk berpartisipasi dalam transaksi.

(Diperoleh dari Transaction)
EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification)

Mendaftarkan resource manager yang memiliki transaksi internal menggunakan pendaftaran fase tunggal (PSPE) yang dapat diprogram.

(Diperoleh dari Transaction)
EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid)

Mendaftarkan resource manager yang memiliki transaksi internal menggunakan pendaftaran fase tunggal (PSPE) yang dapat diprogram.

(Diperoleh dari Transaction)
EnlistVolatile(IEnlistmentNotification, EnlistmentOptions)

Mendaftarkan manajer sumber daya volatil yang mendukung penerapan dua fase untuk berpartisipasi dalam transaksi.

(Diperoleh dari Transaction)
EnlistVolatile(ISinglePhaseNotification, EnlistmentOptions)

Mendaftarkan manajer sumber daya volatil yang mendukung pengoptimalan penerapan fase tunggal untuk berpartisipasi dalam transaksi.

(Diperoleh dari Transaction)
Equals(Object)

Menentukan apakah transaksi ini dan objek yang ditentukan sama.

(Diperoleh dari Transaction)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Transaction)
GetPromotedToken()

Mendapatkan yang byte[] dikembalikan oleh Promote metode ketika transaksi dipromosikan.

(Diperoleh dari Transaction)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
PromoteAndEnlistDurable(Guid, IPromotableSinglePhaseNotification, ISinglePhaseNotification, EnlistmentOptions)

Mempromosikan dan mendaftarkan manajer sumber daya tahan lama yang mendukung penerapan dua fase untuk berpartisipasi dalam transaksi.

(Diperoleh dari Transaction)
Rollback()

Mengembalikan (membatalkan) transaksi.

(Diperoleh dari Transaction)
Rollback(Exception)

Mengembalikan (membatalkan) transaksi.

(Diperoleh dari Transaction)
SetDistributedTransactionIdentifier(IPromotableSinglePhaseNotification, Guid)

Mengatur pengidentifikasi transaksi terdistribusi yang dihasilkan oleh promotor non-MSDTC.

(Diperoleh dari Transaction)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Acara

TransactionCompleted

Menunjukkan bahwa transaksi selesai.

(Diperoleh dari Transaction)

Implementasi Antarmuka Eksplisit

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Mendapatkan dengan data yang SerializationInfo diperlukan untuk membuat serial transaksi ini.

(Diperoleh dari Transaction)

Berlaku untuk

Keamanan Thread

Jenis ini aman untuk utas.

Lihat juga