我真的是F#noob,我试着编写非常简单的程序,它并行地迭代列表。这是简化代码
let test = ["xx"; "yy"; "zz"]
let urls =
["http://google.com";"http://google.com"]
let p l = async {
let t = test
for k in t do
printf "%s" k
}
let find =
urls
|> List.map p
|> Async.Parallel
|> Async.RunSynchronously
|> ignore
[<EntryPoint>]
let main argv =
find
printfn "%A" argv
0 // return an integer exit code
不幸的是这个程序永远不会完成。它无法解决这一问题:
let t = test
它永远不会越过那条线。但是如果我以这种方式改变查找和主要功能:
let find =
urls
|> List.map p
|> Async.Parallel
[<EntryPoint>]
let main argv =
find
|> Async.RunSynchronously
|> ignore
printfn "%A" argv
0 // return an integer exit code
一切都按预期工作正常。有人可以解释一下我的区别吗?
此外,如果我不调用测试功能,而是将代码列表调用为“p”函数
let t = ["xx"; "yy"; "zz"]
它在第一版中工作正常。
答案 0 :(得分:4)
所以问题是find
不是一个函数,而是一个值。因此find
实际上在main
之前运行(在第一个示例中)。
将定义更改为let find()
似乎对我有用。