DependentTransaction Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- 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 |
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, Guid) |
Mendaftarkan resource manager yang memiliki transaksi internal menggunakan pendaftaran fase tunggal (PSPE) yang dapat diprogram. (Diperoleh dari Transaction) |
EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification) |
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 |
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.