Im Folgenden finden Sie eine Aktualisierung des Async-Cache und der Datenbank mithilfe des Transaktionsbereichs. Ich kann TransactionScopeAsyncFlowOption.Enabled
nicht verwenden, das in v 4.5.1 eingeführt wurde, da der Apache Ignite.Net Cache, den ich verwende, es nicht unterstützt. Ich habe versucht, eine Abhilfe zu finden, indem Sie die aktuellen Synchronization Context
Erfassung und dann Synchronization Context Send
Methode explizit mit, die Transaktion abzuschließen, aber das funktioniert nicht, wie ich noch Transaction scope must be disposed on same thread it was created
Aktivieren von Async TransactionScope ohne TransactionScopeAsyncFlowOption.Enabled
Jeder Vorschlag, einen Fehler wie etwa zu gehen, um die Async Update
zu erreichen. einer der Vorschlag von Apache Ignite Unterstützung ist wie etwas zu verwenden:
Task.WhenAll(cacheUpdate, databaseUpdate).Wait()
, aber das würde Async Code Sync machen, also nicht einer der besten Option
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);
}
}
ich nicht ganz laufen zu bekommen, warum Sie nicht TransactionScopeAsyncFlowOption.Enabled verwenden können. Sie müssen auf .NET 4.0 laufen? – Evk
Dies würde Cache Update Async-Methoden verwenden, die von Apache Ignite.Net zur Verfügung gestellt werden, die mit dem Java-Prozess kommunizieren und gemäß denen sie diese Option nicht unterstützen. Ich kenne nicht alle internen Details von Warum –
Wusste nicht, dass diese Funktion explizite Unterstützung von einer Drittanbieterkomponente erfordert. – Evk