Я думаю, что мне не хватает чего-то действительно простого здесь.Функция 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
Если я звоню ParallelExample
модуль, почему F # работает код в SequentialExample
модуле?
Что я делаю неправильно?
(Dear StackOverflow, перестать говорить «Похоже, ваш пост в основном код,., Пожалуйста, добавьте еще некоторые детали», на мой вопрос имеет достаточно деталей)
По существу, в файле модуля, если в какой-то момент компилятор видит что-то вроде 'let a = ...' it myst вычисляет значение 'a' –
Вы знаете, почему компилятор F # работает таким образом? – Gabriel
ну, он должен вычислить его в какой-то момент, а начало - лучшее время. Это обязательно будет определено в спецификации где-то –