如何确保只有一个项目添加到.NET

时间:2016-08-11 02:25:39

标签: c# .net collections locking

我们有一个Foo的静态列表。我试图确保,如果Foo不存在,请从数据库中获取它。这个操作(DB-Get)昂贵所以我想知道我们如何做到这一点?

例如:

if (list.Any(x => x.Name == Leia))
{
   //list of Foo's doesn't have any foo with the name 'Leia'
   var foo = db.GetFoo("Leia");
   foos.Add(foo);
}

最初,我正在考虑使用Double-checked locking,但我不确定这是否是我应该采取的正确路径..特别是在reading a bit about it以及建议使用之后Lazy<T>代替..除了我的实例不是这里的问题..它是我担心的实例中的ITEMS。

注意:这里的关键不是关于线程安全的集合(例如像ConcurrentBag / ConcurrentDictionary等),而是关于减少对DB的调用的更多信息。

情景:

  • 10人同时访问网站
  • 所有10个人都看到该系列中缺少该项目。
  • 只有1x db.GetFoo("Leia");被称为
  • 其他9人随后从集合中检索该项目(无数据库调用)。

免责声明:我不确定标题是否正确 - 很高兴听到有关修改标题的建议。

0 个答案:

没有答案