Lazy <t>。如果一个线程失败,则初始化的后续线程

时间:2015-07-23 13:56:37

标签: c# .net multithreading lazy-loading

我使用Lazy<T> LazyThreadSafetyMode作为ExecutionAndPublication并使用初始化方法。

我想要实现的是,如果在一个线程上初始化失败,那么下一个线程应该尝试再次初始化它。我不希望所有线程都进行初始化竞争(如仅发布模式)或者为所有线程再次缓存和抛出异常(如在ExecutionAndPublication模式下)。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:2)

正如here

所解释的那样
  

如上一节所述,由Lazy对象创建   指定LazyThreadSafetyMode.PublicationOnly处理异常   不同。使用PublicationOnly,多个线程可以竞争   初始化Lazy实例。在这种情况下,例外情况不是   缓存,并尝试访问Value属性可以继续,直到   初始化成功。