6
F#的Async.Parallel操作的结果是否保证在订单作业中提交?我的示例代码按顺序返回结果,但我无法在MSDN文档或F#规范中找到任何提及,请确保此必须是就是这种情况 - 这并非巧合。F#Async.Parallel结果保证按顺序吗?
这里是我的示例代码:
let r = System.Random()
Async.Parallel [
for i in 0..10 ->
async {
let rand_num = r.Next(10)
do! Async.Sleep(rand_num) (* Simulate jobs taking a variable amount of time *)
printfn "%i %i" i rand_num
return i
}
]
|> Async.RunSynchronously
|> printfn "%A"
而这里的输出。
0 0
5 1
4 1
3 3
10 6
9 4
7 5
2 5
1 5
8 7
6 9
[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]
您可以看到,在此次运行中,异步函数以不确定的顺序完成,但结果数组已排序。这种行为是否有保证?
这让我想起整数的'GetHashCode'方法只返回整数的事实。这是一个实现细节,而不是规范要求。我会建议不要依赖于这种行为。 –
@ChristopherStevenson - 我做了一些挖掘,规范似乎至少暗示输出顺序是有保证的 –