Ich denke, ich vermisse etwas wirklich einfaches hier.F # -Funktion läuft ohne aufgerufen zu werden
Dieser Code
open System.Threading
let duration = 1000
module SequentialExample =
let private someTask item =
printfn "oh god why"
Thread.Sleep(duration)
item + " was computed"
let private items = [
"foo"
"bar"
"baz"
]
let getComputedItems =
printfn "heh"
[for item in items -> someTask item]
|> Array.ofList
module ParallelExample =
let private someTask item =
printfn "that's ok"
Thread.Sleep(duration)
item + " was computed"
let private items = [
"foo"
"bar"
"baz"
]
let getComputedItems =
Async.Parallel [for item in items -> async { return someTask item }]
|> Async.RunSynchronously
[<EntryPoint>]
let main args =
ParallelExample.getComputedItems |> ignore
0
Hat die folgende Ausgabe:
heh
oh god why
oh god why
oh god why
that's ok
that's ok
that's ok
Wenn ich ParallelExample
Modul bin aufrufen, warum Sie den Code in SequentialExample
Modul F # ausgeführt wird?
Was mache ich falsch?
(Lieber Stackoverflow, aufhören zu sagen: "Es sieht aus wie Sie Ihre Post meist Code ist;. Sie einige weitere Details hinzufügen", meine Frage genug Details hat)
Im Wesentlichen, in einer Moduldatei, wenn der Compiler zu irgendeinem Zeitpunkt etwas wie "let a = ..." sieht, berechnet er den Wert von 'a' –
Wissen Sie, warum der F # -Compiler so funktioniert? – Gabriel
naja es muss irgendwann kalkuliert werden und der start ist die beste zeit. Es muss irgendwo in der Spezifikation irgendwo definiert werden –