मुझे एसिंक/प्रतीक्षा का उपयोग कब करना चाहिए और मुझे सी # में समानांतर .foreach का उपयोग कब करना चाहिए? समांतर और async/एक ही उद्देश्य की सेवा इंतजार कर रहे हैं? उनमें क्या अंतर हैं?Async/प्रतीक्षा और समानांतर सी #
23
A
उत्तर
72
async/का इंतजार है, के बारे में asynchrony है जबकि Parallel.ForEach
के बारे में समानांतरवाद है। वे अवधारणाओं से संबंधित हैं, लेकिन वही नहीं।
Parallel.ForEach
का उपयोग तब किया जाता है जब आप संग्रह में सभी वस्तुओं पर समान ऑपरेशन निष्पादित करना चाहते हैं, समानांतर में, मौजूदा थ्रेड को अवरुद्ध करते हुए, सभी ऑपरेशन पूरा होने तक।
async/await का उपयोग तब किया जाता है जब वर्तमान ऑपरेशन एक विशेष एसिंक्रोनस ऑपरेशन पूरा होने तक और प्रगति नहीं कर सकता है, लेकिन आप वर्तमान धागे को अवरुद्ध नहीं करना चाहते हैं। यह दो स्थितियों में विशेष रूप से उपयोगी है:
- लेखन कोड जो मूल रूप से एक के बाद एक विभिन्न अतुल्यकालिक संचालन की शुरूआत की,, यूआई धागे पर, संचालन के बीच कुछ समय के लिए यूआई तक पहुँचने। (यह उससे अधिक सामान्य है, लेकिन यह एक साधारण उदाहरण है।) आप यूआई थ्रेड को अवरुद्ध नहीं करना चाहते हैं, लेकिन उन सभी एसिंक्रोनस ऑपरेशंस को प्रबंधित करना अन्यथा दर्द है।
- एक समय में हैंडलिंग लंबे समय से चलने वाले संचालन के लिए - उदा। एक वेब सर्वर में। प्रत्येक व्यक्तिगत अनुरोध में अन्य वेब सेवा, डेटाबेस इत्यादि में कॉल करने के कारण लंबा समय लग सकता है - लेकिन आप प्रति अनुरोध एक धागा नहीं चाहते हैं, क्योंकि धागे अपेक्षाकृत महंगे संसाधन हैं।
आप कोई नया कार्य जो Parallel.ForEach
फोन करेगा बंद लात, और उसके बाद उस कार्य का इंतजार कर रहा द्वारा समानांतरवाद और asynchrony जोड़ सकते हैं। (बस एक उदाहरण के रूप में।)
इस संबंधित प्रश्न को देखें: http://stackoverflow.com/questions/9898441/do-the-new-c-sharp-5-0-async-and-await-keywords-use -मल्टी-कोर –
समानांतर https://stackoverflow.com/questions/11564506/nesting-await-in-parallel-foreach/11565531#11565531 में एसिंक ऑपरेशन को कॉल करने का तरीका देखें –