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 - 나는 파기를했는데 사양은 최소한 출력 순서가 보장된다는 것을 의미하는 것 같습니다. –