Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous F#无法在异步模式下求解函数_Asynchronous_F# - Fatal编程技术网

Asynchronous F#无法在异步模式下求解函数

Asynchronous F#无法在异步模式下求解函数,asynchronous,f#,Asynchronous,F#,我真的是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

我真的是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
它永远不会越过那条线。但如果我以这种方式更改find和main函数:

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

它在第一个版本中运行良好。

因此问题在于
find
不是一个函数,而是一个值。因此,
find
实际上在
main
之前运行(在第一个示例中)


将定义更改为
let find()
对我来说似乎很好。

因此问题在于
find
不是一个函数,而是一个值。因此,
find
实际上在
main
之前运行(在第一个示例中)


将定义更改为
let find()
对我来说似乎很好。

你说的“无法解决
let t=test
”是什么意思?一定要使两个版本的行为更相似您应该将
find
放入一个函数中-第二个版本的区别是
async
计算在您执行
async.runsynchronousy
时立即开始-但是这段代码非常混乱,因为我不知道您想做什么(我猜你复制并粘贴了默认的异步示例并删除了所有的url抓取内容?)是的,你说得对。我已经删除了所有的url抓取代码。John的aswer有效。你说“无法解决
让t=test
是什么意思?一定要使两个版本的行为更相似您应该将
find
放入一个函数中-第二个版本的区别是
async
计算在您执行
async.runsynchronousy
时立即开始-但是这段代码非常混乱,因为我不知道您想做什么(我猜您复制并粘贴了默认的异步示例,并删除了所有url获取内容?)是的,你是对的,Castern我已经删除了所有url获取代码。John的aswer有效。是的-这或将
同步运行
移动到
main
-似乎在入口点之外/之前启动
异步
-工作流确实会将程序置于底部;)(以前从未注意到-应该有兴趣找出原因-感谢这个问题btw-+1)是-这或将
运行同步
移动到
-似乎在入口点之外/之前启动
异步
-工作流确实会将程序置于底部;)(以前从未注意到-想知道原因应该很有趣-谢谢你的提问,顺便说一句-+1)
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
let t = ["xx"; "yy"; "zz"]