Voici la mise en cache Async et la mise à jour de la base de données à l'aide de Transaction Scope. Je ne peux pas utiliser TransactionScopeAsyncFlowOption.Enabled
introduit dans la version 4.5.1, car le cache Apache Ignite.Net que j'utilise ne le supporte pas. J'ai essayé de trouver une solution en captant le courant Synchronization Context
puis explicitement en utilisant la méthode Synchronization Context Send
pour compléter la transaction, mais cela ne fonctionne pas comme je reçois encore une erreur Transaction scope must be disposed on same thread it was created
Activer Async TransactionScope sans TransactionScopeAsyncFlowOption.Enabled
Toute suggestion comment s'y prendre pour atteindre l'Async Update
. une de la suggestion par Apache Ignite support est d'utiliser quelque chose comme:
Task.WhenAll(cacheUpdate, databaseUpdate).Wait()
, mais qui rendrait le code Async Sync, donc pas l'une des meilleures options
public async Task Update()
{
// Capture Current Synchronization Context
var sc = SynchronizationContext.Current;
TransactionOptions tranOptions = new TransactionOptions();
tranOptions.IsolationLevel = System.Transactions.IsolationLevel.RepeatableRead;
using (var ts = new TransactionScope())
{
// Do Cache Update Operation as Async
Task cacheUpdate = // Update Cache Async
// Do Database Update Operation as Async
Task databaseUpdate = // Update Database Async
await Task.WhenAll(cacheUpdate, databaseUpdate);
sc.Send(new SendOrPostCallback(
o =>
{
ts.Complete();
}), sc);
}
}
Je ne comprends pas bien pourquoi vous ne pouvez pas utiliser TransactionScopeAsyncFlowOption.Enabled. Vous devez exécuter .NET 4.0? – Evk
Ceci utiliserait les méthodes Cache Update Async exposées par Apache Ignite.Net, qui communiquent avec le processus Java et qui ne supportent pas cette option. Je ne suis pas au courant de tous les détails internes de Pourquoi –
Je ne savais pas que cette fonctionnalité nécessite un soutien explicite de tout composant tiers. – Evk