open System
open System.Threading
open Hopac
open Hopac.Infixes
let hello what = job {
for i=1 to 3 do
do! timeOut (TimeSpan.FromSeconds 1.0)
do printfn "%s" what
}
run <| job {
let! j1 = Promise.start (hello "Hello, from a job!")
do! timeOut (TimeSpan.FromSeconds 0.5)
let! j2 = Promise.start (hello "Hello, from another job!")
//do! Promise.read j1
//do! Promise.read j2
return ()
}
Console.ReadKey()
Hello, from a job!
Hello, from another job!
Hello, from a job!
Hello, from another job!
Hello, from a job!
Hello, from another job!
这是Hopac 文档中的示例之一。从我在这里可以看到,即使我没有显式调用Promise.read j1
或Promise.read j2
函数仍然运行。我想知道是否可以推迟执行承诺的计算,直到它们实际运行?或者我应该使用lazy
传播惰性值的目的吗?
查看文档,Hopac 的承诺似乎应该是懒惰的,但我不确定这种懒惰应该如何表现出来。