У меня сложилось впечатление, что давай! в f # был достаточно умен, чтобы извинять последовательности назначений в параллели.
Однако в следующем примере показано другое поведение: назначение a, b, c выполняется синхронно.
let sleep sec =
async
{
System.Threading.Thread.Sleep(sec * 1000)
return sec
}
let bar = async
{
let! a = sleep 1
let! b = sleep 3
let! c = sleep 3
return a+b+c
}
let foo = Async.RunSynchronously(bar)
printfn "%d" foo
Это так / должно быть?
И если я хочу выполнить a, b, c параллельно, я должен использовать Async.Parallell ... |> Async.RunSynchronously ... тогда?
Приведенный выше пример, конечно, бесполезен, реальный вариант использования - это что-то вроде запроса к БД и одновременного вызова некоторых веб-сервисов.