2016-12-02 22 views
5

मुझे लगता है कि यहां एसिंक/प्रतीक्षा कीवर्ड अनावश्यक हैं।क्या यह समानांतर एसिंक कॉल सरलीकृत किया जा सकता है?

Parallel.Invoke(
    async() => await DoSomethingAsync(1).ConfigureAwait(false), 
    async() => await DoSomethingAsync(2).ConfigureAwait(false) 
); 

कार्य लौटने की अनेक विधियों का देखते हुए, उन्हें समानांतर में चलाने के लिए और वापस जाने के लिए जब सब पूरा कर रहे हैं के लिए किसी भी और अधिक सरल तरीका है?

+4

Task.WhenAll – Nkosi

+5

के बारे में पढ़ें 'Task.WhenAll (DoSomethingAsync (1), DoSomethingAsync (2))' – Enigmativity

+0

क्यों आप मिश्रण कर रहे हैं 'Parallel.Invoke' और' async/await'? समांतर। इन्वोक प्रत्येक कॉल को अलग थ्रेड में चलाएगा और * ब्लॉक * को समाप्त करने के लिए प्रतीक्षा करते समय। या आप अलग-अलग कार्यों को सरणी में संग्रहीत कर सकते हैं और सरणी का इंतजार करते समय –

उत्तर

4
await Task.WhenAll(DoSomethingAsync(1), DoSomethingAsync(2)); 

वैकल्पिक रूप से WhenAll() को .ConfigureAwait(false) जोड़ने के लिए, संदर्भ के आधार पर।

+0

या' टास्क। प्रतीक्षा करें 'अगर बाहरी विधि नहीं है' वर्तमान में 'async' नहीं है और/या वे' समानांतर 'इन्वोक' के मौजूदा अर्थात् से बदलना नहीं चाहते हैं जो अवरुद्ध है, async नहीं। –

+0

@Damien_The_Unbeliever हाँ मुझे ऐसा लगता है, अगर यह एक विशिष्ट आवश्यकता है; प्रश्न में वास्तव में पर्याप्त संदर्भ नहीं है। – sellotape

+0

यह काम करता है! [यह टिप्पणी यहां] (https://stackoverflow.com/questions/25009437/running-multiple-async-tasks-and-waiting-for-them-all-to-complete#comment65496481_25010220) ने मुझे भ्रमित कर दिया कि "कार्य। जब सभी 'आपके लिए कार्यों को शुरू नहीं करता है। आपको उन्हें "गर्म" प्रदान करना होगा, जिसका अर्थ पहले ही शुरू हो चुका है। ", लेकिन स्पष्ट रूप से आपको ऐसा करने की आवश्यकता नहीं है। – orad

संबंधित मुद्दे