क्या एफ # एस असिन से परिणाम हैं। आदेश नौकरियों में आने के लिए समानांतर ऑपरेशन जमा किया गया था? मेरा नमूना कोड परिणामों को क्रम में लौटाता है, लेकिन मुझे एमएसडीएन दस्तावेज़ों में कोई उल्लेख नहीं मिल रहा है, या एफ # स्पेक, यह सुनिश्चित करता है कि यह होना चाहिए - यह एक संयोग नहीं है।क्या 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|]
आप देख सकते हैं कि इस समय में, async कार्यों अनिश्चित क्रम में पूरे, फिर भी परिणामी सरणी सॉर्ट हो जाता है। क्या यह व्यवहार गारंटी है?
यह मुझे इस तथ्य की याद दिलाता है कि एक पूर्णांक की 'गेटहाशकोड' विधि केवल पूर्णांक लौटाती है। एक spec आवश्यकता के विपरीत, यह एक कार्यान्वयन विस्तार है। मैं उस व्यवहार के आधार पर नहीं अनुशंसा करता हूं। –
@ क्रिस्टोफर स्टेवेन्सन - मैंने कुछ खुदाई की और कल्पना कम से कम यह दर्शाती है कि आउटपुट ऑर्डर की गारंटी है –