ConcurrentDictionary + Lazy - 实例化只会发生一次吗?

时间:2017-11-25 18:24:00

标签: c# concurrency .net-core

方案

假设我们有:

var dictionary = new ConcurrentDictionary<string, Lazy<Heavy>>();

实例化Heavy非常耗费资源。让我们考虑一下这段代码:

return dictionary.GetOrAdd("key", key => 
{
    return new Lazy<Heavy>(() =>
    {
        return Instantiate();
    });
}).Value;

方法Instantiate()当然会返回Heavy类型的实例。

问题

对于给定的密钥,100%保证方法Instantiate()最多只能调用一次吗?

来源

有些人声称拥有多个线程,我们只能创建Lazy<Heavy>的多个实例,这非常便宜。实际方法Instantiate()最多只能调用一次。

我个人有一个印象,这是假的。真相是什么?

0 个答案:

没有答案