我的IDictionary<TKey, IList<TValue>>
应用程序中有一个。用户有如下请求:
我想取出:TKey=5 的 n 个值和 TKey=3 的 m 个值。
但是,只有在所有指定元素都存在时才应进行删除。如果字典有 n+3 个 TKey=5 值但只有 m-1 个 TKey=3 值,则不应删除任何元素。
保证这种交易行为的最佳方式是什么?您是否会锁定整个字典,然后检查是否所有内容都存在,如果所有指定的查询都已完成,则删除元素?
有没有办法让字典以某种方式交易?就像是:
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)
线程安全方法的包装类是最佳实践吗?
最佳做法是什么?