私はIDictionary<TKey, IList<TValue>>
アプリケーションに を持っています。ユーザーには次のようなリクエストがあります。
取り出したいのは、TKey=5 の n 値と TKey=3 の m 値です。
ただし、削除は、指定されたすべての要素が存在する場合にのみ行う必要があります。ディクショナリに TKey=5 の n+3 の値があり、TKey=3 の m-1 の値しかない場合、要素を削除する必要はありません。
このトランザクション動作を保証する最善の方法は何ですか? 辞書全体をロックし、すべてが存在するかどうかを確認し、指定されたすべてのクエリが満たされている場合は要素を削除しますか?
ディクショナリをトランザクション対応にする方法はありますか? 何かのようなもの:
using(var tx = new TransactionScope())
{
foreach(var query in queries)
// try to remove elements of query -> exception if not possible -> all others are back in place
tx.Commit(); // ok, all queries fulfilled, commit now
}
TakeFromDictionary(IEnumerable<Query> queriesWhichMustBeFulfilled)
または、スレッドセーフなメソッドを持つ辞書のラッパー クラスを作成するのがベスト プラクティスですか?
ベストプラクティスは何ですか?