Có phải các kết quả từ hoạt động Async của F # được đảm bảo đến trong các lệnh đặt hàng không? Mã mẫu của tôi trả về kết quả theo thứ tự, nhưng tôi không thể tìm thấy bất kỳ đề cập nào trong tài liệu MSDN hoặc thông số F #, đảm bảo rằng phải là trường hợp - đó không phải là trùng hợp ngẫu nhiên.Are F # Async.Kết quả song song có được đảm bảo theo thứ tự không?
Đây là mẫu mã của tôi:
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"
Và đây là đầu ra.
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|]
Bạn có thể thấy rằng, trong lần chạy này, các hàm async hoàn thành theo thứ tự không xác định, nhưng mảng kết quả được sắp xếp. Hành vi này có được đảm bảo không?
Điều này nhắc tôi về thực tế rằng phương thức 'GetHashCode' của một số nguyên đơn giản trả về số nguyên. Đó là một chi tiết thực hiện, trái với yêu cầu cụ thể. Tôi khuyên bạn không nên tùy thuộc vào hành vi đó. –
@ChristopherStevenson - Tôi đã thực hiện một số kỹ thuật đào và thông số dường như ít nhất ngụ ý rằng thứ tự đầu ra được đảm bảo –