并行运行
并行运行
open System
open System.Threading.Tasks
Parallel.For (0, 100,
fun i ->
printfn "Starting %d ..." i
System.Threading.Thread.Sleep (100*i%8)
printfn "Finished %d ..." i
)
输出结果:
Starting 0 ...
Starting 50 ...
Finished 0 ...
Starting 1 ...
Finished 50 ...
Starting 51 ...
Finished 1 ...
Starting 2 ...
Finished 2 ...
Starting 3 ...
Finished 51 ...
......
let prog i =
async {
printfn "Starting %d ..." i
do! Async.Sleep (100%(i+1)*10)
printfn "Finished %d ..." i
return 1
}
let result =
[0..99]
|> Seq.map prog
|> Async.Parallel
|> Async.StartAsTask
输出结果:
...
Starting 98 ...
Starting 99 ...
Finished 99 ...
Finished 49 ...
Finished 32 ...
Finished 24 ...
Finished 23 ...
Finished 19 ...
Finished 18 ...
Finished 15 ...
Finished 13 ...
Finished 11 ...
....