2012-10-14 28 views
9

मैंने एसिंक के लिए .NET4.5 का उपयोग शुरू किया और प्रतीक्षा की।एसिंक का उपयोग करना और सिस्टम के साथ प्रतीक्षा करना। थ्रेडिंग। थ्रेड। सो जाओ

await Task.Delay(3000); 

अब मेरी लंबी अवधि गणना वास्तव में के समान होते हैं:

System.Threading.Thread.Sleep(3000) 
उदाहरण के लिए

:

for(i=0;i<1000000000;i++) 
    i=i*2; 

कैसे कर सभी उदाहरण एक लंबी अवधि के आपरेशन अनुकरण करने के लिए निम्नलिखित का उपयोग करने लगते हैं मैं इस काम को async के साथ बनाते हैं और इंतजार कर रहे हैं? अब ऐसा लगता है कि मैं इस महान नई विधि के साथ वेब रिक्वेस्ट, डब्ल्यूसीएफ इत्यादि जैसे तरीकों का उपयोग कर सकता हूं।

मुझे बिंदु कहाँ याद आ रही है?

+0

आप "मेरी लंबी अवधि गणना वास्तव में' Thread.Sleep' के समान हैं "क्या मतलब है क्या है? मैं कल्पना नहीं करता कि वे * वास्तव में * सोते हैं। –

+0

नहीं मेरा मतलब है, वे लूप के लिए अवरुद्ध कर रहे हैं? जो मैं मूल रूप से हासिल करने की कोशिश करता हूं वह लूप के लिए लंबे समय तक इंतजार करना है। – Enrico

+0

संभवतः यह कहना बेहतर होगा कि आपकी गणना कहने के बजाए नींद (3000) फ़ंक्शन का उपयोग करके अवधि का अनुमान लगाया जा सकता है? – HansLindgren

उत्तर

17
await Task.Run(() => Thread.Sleep(10000)) 

काम होगा, लेकिन यह नहीं बल्कि व्यर्थ

+0

हां लेकिन यह वही है जो मुझे चाहिए था। मैं थ्रेड को प्रतिस्थापित कर सकता हूं। अवरुद्ध समारोह के साथ सो जाओ और यह काम करता है !! धन्यवाद, एक बेवकूफ सवाल की तरह लगता है, लेकिन यह मेरी मदद करता है। – Enrico

+1

आप कहते हैं कि यह व्यर्थ है, क्या यह मुझे एसिंक फ़ंक्शन में मदद नहीं करेगा जो सामान्य रूप से अवरुद्ध होगा। यदि आप यह अनुमान लगाते हैं तो आपका धागा बंद हो सकता है और अन्य काम कर सकता है। मैं विशेष रूप से आईआईएस के अंदर चलने के साथ बोल रहा हूँ। – Zapnologica