私はここで本当に簡単なものがないと思います。F#関数が呼び出されずに実行されています
このコード
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
は、次のような出力を持っている:
heh
oh god why
oh god why
oh god why
that's ok
that's ok
that's ok
私はなぜF#がSequentialExample
モジュールでコードを実行されている、ParallelExample
モジュールを呼んでいる場合は?
私は間違っていますか?
(親愛なるStackOverflowのは、言って停止「あなたのポストはほとんどのコードであるように見えます;いくつかの詳細を追加してください」、私の質問に十分な詳細を持っている)
本質的に、ある時点でコンパイラが 'let a = ...'のようなものを見た場合、それはmystの値を計算します。 –
F#コンパイラがこのように動作する理由を知っていますか? – Gabriel
それはある時点でそれを計算しなければならず、スタートが最適な時間です。これはどこかの仕様ですべて定義されることになっています –