トランザクションスコープを使用した非同期キャッシュおよびデータベースの更新は次のとおりです。 v 4.5.1で導入されたTransactionScopeAsyncFlowOption.Enabled
を使用することはできません。これは、使用しているApache Ignite.Netキャッシュがサポートしていないためです。私は明示的にトランザクションを完了するために、Synchronization Context Send
メソッドを使用して、現在のSynchronization Context
をキャプチャしてことで、回避策を見つけることを試みたが、私はまだエラーTransaction scope must be disposed on same thread it was created
TransactionScopeAsyncFlowOption.Enabledを使用しないAsync TransactionScopeの有効化
Async Update
を達成することについて移動する方法を任意の提案を取得するので、これは動作しません。アパッチのIgniteのサポートにより、提案の一つのようなものを使用することです。そのため、最良の選択肢ブログ全体検索のかなりの量の後
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);
}
}
で実行する非同期メソッドを取得する
TransactionScopeAsyncFlowOption.Enabled
は必要ありません。 .NET 4.0で実行する必要がありますか? – Evkこれは、Javaプロセスと通信するApache Ignite.Netによって公開されるCache Update Asyncメソッドを使用します。これらのメソッドは、このオプションをサポートしていません。なぜ私はすべての内部の詳細を認識していません –
この機能は、サードパーティのコンポーネントからの明示的なサポートが必要であることを知らなかった。 – Evk