ITransaction Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Séquence d’opérations effectuées en tant qu’unité logique unique de travail.
public interface ITransaction : IDisposable
type ITransaction = interface
interface IDisposable
Public Interface ITransaction
Implements IDisposable
- Implémente
Remarques
Une transaction doit présenter les propriétés ACID suivantes. Consultez https://technet.microsoft.com/en-us/library/ms190612).
- Atomicité : une transaction doit être une unité de travail atomique; soit toutes ses modifications de données sont effectuées, soit aucune d’entre elles n’est effectuée.
- Cohérence : une fois terminée, une transaction doit laisser toutes les données dans un état cohérent. Toutes les structures de données internes doivent être correctes à la fin de la transaction.
- Isolation : les modifications apportées par des transactions simultanées doivent être isolées des modifications apportées par toutes les autres transactions simultanées. Le niveau d’isolation utilisé pour une opération dans un ITransaction est déterminé par l’exécution IReliableState de l’opération.
- Durabilité : une fois la transaction terminée, ses effets sont en permanence en place dans le système. Les modifications sont conservées même en cas de défaillance du système.
Tout instance membre de ce type n’est pas garanti pour être thread-safe. Cela fait des transactions l’unité de concurrence : les utilisateurs peuvent avoir plusieurs transactions en cours à un moment donné, mais pour une transaction donnée, chaque API doit être appelée une à la fois. Toutes les IReliableCollection{T} API qui acceptent une transaction et retournent une tâche doivent être attendues une par une.
Voici un exemple d’utilisation correcte.
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
try
{
using (var tx = this.StateManager.CreateTransaction())
{
await concurrentQueue.EnqueueAsync(tx, 12L, cancellationToken);
await tx.CommitAsync();
return;
}
}
catch (TransactionFaultedException e)
{
// This indicates that the transaction was internally faulted by the system. One possible cause for this is that the transaction was long running
// and blocked a checkpoint. Increasing the "ReliableStateManagerReplicatorSettings.CheckpointThresholdInMB" will help reduce the chances of running into this exception
Console.WriteLine("Transaction was internally faulted, retrying the transaction: " + e);
}
catch (FabricNotPrimaryException e)
{
// Gracefully exit RunAsync as the new primary should have RunAsync invoked on it and continue work.
// If instead enqueue was being executed as part of a client request, the client would be signaled to re-resolve.
Console.WriteLine("Replica is not primary, exiting RunAsync: " + e);
return;
}
catch (FabricNotReadableException e)
{
// Retry until the queue is readable or a different exception is thrown.
Console.WriteLine("Queue is not readable, retrying the transaction: " + e);
}
catch (FabricObjectClosedException e)
{
// Gracefully exit RunAsync as this is happening due to replica close.
// If instead enqueue was being executed as part of a client request, the client would be signaled to re-resolve.
Console.WriteLine("Replica is closing, exiting RunAsync: " + e);
return;
}
catch (TimeoutException e)
{
Console.WriteLine("Encountered TimeoutException during EnqueueAsync, retrying the transaction: " + e);
}
// Delay and retry.
await Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken);
}
Voici un exemple d’utilisation incorrecte qui a un comportement non défini.
using (var txn = this.StateManager.CreateTransaction())
{
List<Task> taskList = new List<Task>();
taskList.Add(concurrentQueue.DequeueAsync(txn, cancellationToken));
taskList.Add(concurrentQueue.DequeueAsync(txn, cancellationToken));
await Task.WhenAll(taskList);
await txn.CommitAsync();
}
Propriétés
CommitSequenceNumber |
Numéro de séquence de l’opération de validation. |
TransactionId |
Obtient une valeur identifiant la transaction. |
Méthodes
Abort() |
Abandonne (annule) la transaction. |
CommitAsync() |
Validez la transaction. |
GetVisibilitySequenceNumberAsync() |
Obtient le numéro de séquence de visibilité. |
S’applique à
Azure SDK for .NET