假设我们有:
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()
最多只能调用一次。
我个人有一个印象,这是假的。真相是什么?