DependentTransaction Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Descrive un duplicato di una transazione che garantisce che non può essere eseguito il commit della transazione fino a quando nell'applicazione non si completano le operazioni relative alla transazione. La classe non può essere ereditata.
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
- Ereditarietà
- Attributi
Esempio
Nell'esempio seguente viene illustrato come creare una transazione dipendente.
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
Commenti
DependentTransaction è un clone di un Transaction oggetto creato usando il DependentClone metodo . L'unico scopo è consentire all'applicazione di rimanere inattivi e garantire che la transazione non possa eseguire il commit mentre il lavoro è ancora in esecuzione sulla transazione (ad esempio, in un thread di lavoro).
Quando il lavoro svolto all'interno della transazione clonata viene finalmente completato e pronto per il commit, può informare l'autore della transazione usando il Complete metodo . È quindi possibile mantenere la coerenza e la correttezza dei dati.
L'enumerazione DependentCloneOption viene utilizzata per determinare il comportamento al commit. Questo controllo del comportamento consente a un'applicazione di venire a riposo, oltre a fornire supporto per la concorrenza. Per altre informazioni sull'uso di questa enumerazione, vedere Managing Concurrency with DependentTransaction .For more information on how this enumeration is used, see Managing Concurrency with DependentTransaction.
Proprietà
IsolationLevel |
Ottiene il livello di isolamento della transazione. (Ereditato da Transaction) |
PromoterType |
Identifica in modo univoco il formato di |
TransactionInformation |
Recupera informazioni aggiuntive su una transazione. (Ereditato da Transaction) |
Metodi
Clone() |
Crea un duplicato della transazione. (Ereditato da Transaction) |
Complete() |
Tenta di completare la transazione dipendente. |
DependentClone(DependentCloneOption) |
Crea un duplicato dipendente della transazione. (Ereditato da Transaction) |
Dispose() |
Rilascia le risorse contenute nell'oggetto. (Ereditato da Transaction) |
EnlistDurable(Guid, IEnlistmentNotification, EnlistmentOptions) |
Integra una gestione risorse durature che supporta il commit a due fasi per la partecipazione a una transazione. (Ereditato da Transaction) |
EnlistDurable(Guid, ISinglePhaseNotification, EnlistmentOptions) |
Integra una gestione risorse durature che supporta l'ottimizzazione del commit a una fase per la partecipazione a una transazione. (Ereditato da Transaction) |
EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) |
Inserisce un gestore risorse con una transazione interna che usa un'integrazione PSPE (Promotable Single Phase Enlistment). (Ereditato da Transaction) |
EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification) |
Inserisce un gestore risorse con una transazione interna che usa un'integrazione PSPE (Promotable Single Phase Enlistment). (Ereditato da Transaction) |
EnlistVolatile(IEnlistmentNotification, EnlistmentOptions) |
Integra un gestore di risorse volatili che supporta il commit a due fasi per partecipare a una transazione. (Ereditato da Transaction) |
EnlistVolatile(ISinglePhaseNotification, EnlistmentOptions) |
Integra una gestione risorse volatili che supporta l'ottimizzazione del commit a una fase per la partecipazione a una transazione. (Ereditato da Transaction) |
Equals(Object) |
Determina se questa transazione e l'oggetto specificato sono uguali. (Ereditato da Transaction) |
GetHashCode() |
Restituisce il codice hash per l'istanza. (Ereditato da Transaction) |
GetPromotedToken() |
Ottiene l'oggetto |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
PromoteAndEnlistDurable(Guid, IPromotableSinglePhaseNotification, ISinglePhaseNotification, EnlistmentOptions) |
Promuove e inserisce una gestione risorse duratura che supporta il commit a due fasi per la partecipazione a una transazione. (Ereditato da Transaction) |
Rollback() |
Esegue il rollback (interruzione) della transazione. (Ereditato da Transaction) |
Rollback(Exception) |
Esegue il rollback (interruzione) della transazione. (Ereditato da Transaction) |
SetDistributedTransactionIdentifier(IPromotableSinglePhaseNotification, Guid) |
Imposta l'identificatore di transazione distribuita generato dal promotore non MSDTC. (Ereditato da Transaction) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Eventi
TransactionCompleted |
Indica che la transazione è stata completata. (Ereditato da Transaction) |
Implementazioni dell'interfaccia esplicita
ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Ottiene un oggetto SerializationInfo con i dati richiesti per la serializzazione di questa transazione. (Ereditato da Transaction) |
Si applica a
Thread safety
Questo tipo è thread-safe.