Lazy.Force()和Lazy.Value之间有什么区别

时间:2011-09-27 12:43:09

标签: .net f# lazy-evaluation

Lazy.Force<T>扩展方法的MSDN文档中说:

  

强制执行此值并返回其结果。与...一样   值。相互排除也用于防止其他线程   计算价值。

这是否意味着它等同于使用Lazy<T> LazyThreadSafetyMode创建ExecutionAndPublication实例,以便只有一个线程可以初始化实例?

由于

2 个答案:

答案 0 :(得分:5)

是。它们都是相同的,并且都确保该值只计算一次。

答案 1 :(得分:0)

该方法存在并且不是函数,这有点奇怪-它不可组合并且复制了.Value的行为。

我将定义以下内容(as seen in the F# compiler):

module Lazy =
    // Lazy.force : Lazy<'T> -> 'T
    let force (x: Lazy<'T>) = x.Force()