2013-04-10 10 views
12

मैं कुछ देर के बाद व्यस्त कर रखा धागाअतुल्यकालिक Thread.Sleep()

workA(); 
Thread.Sleep(1000); 
workB(); 

धागा worka के बाद से बाहर निकलें और (शायद एक नया सूत्र में) workB पर अमल करना चाहिए बिना 2 आपरेशन के बीच भी विलंब रखना चाहते हैं।

मुझे आश्चर्य है कि अगर यह इस स्यूडोकोड के कुछ equevalent

workA(); 
Thread.BeginSleep(1000, workB); // callback 

संपादित संभव है मेरे कार्यक्रम .NET 2.0

संपादित 2 में है: System.Timers.Timer.Elapsed घटना घटना को बढ़ा देंगे 1000 एमएस के बाद। मुझे नहीं पता कि टाइमर थ्रेड 1000 एमएस के लिए व्यस्त होगा या नहीं। (तो मैं धागा अर्थव्यवस्था हासिल न)

+0

समझ में नहीं आता। आपका थ्रेड। स्लीप() कॉल थ्रेड व्यस्त रखने के बिना 2 संचालन के बीच देरी डाल देगा। क्या मैं गलत समझता हूं कि आप क्या चाहते हैं? –

+0

हां लेकिन इस अवधि के लिए थ्रेडपूल (1000 एमएस) में 1 कम धागा उपलब्ध होगा। – albert

+1

आप इसके लिए 'System.Threading.Timer' पसंद कर सकते हैं - नहीं' System.Timers.Timer' और नहीं - कोई "टाइमर थ्रेड" नहीं है - प्रतीक्षा ओएस कर्नेल –

उत्तर

28

तुम्हारा मतलब क्या:

Task.Delay(1000).ContinueWith(t => workB()); 

वैकल्पिक रूप से, एक Timer मैन्युअल पैदा करते हैं।

नोट इस async कोड में खूबसूरत दिखता है:

async Task Foo() { 
    workA(); 
    await Task.Delay(1000); 
    workB(); 
} 

संपादित करें: अपने .NET 2.0 अद्यतन के साथ, आप कॉलबैक के साथ सेटअप अपनी खुद की Timer करना होगा। एक nuget पैकेज System.Threading.Tasks है जो Task एपीआई को .NET 3.5 तक नीचे लाता है, लेकिन एक: यह 2.0 पर नहीं जाता है, और बी: मुझे नहीं लगता कि इसमें Task.Delay शामिल है।

+0

या यहां तक ​​कि 'कार्य। डेले (1000) .ait()) के लिए निकोलस धन्यवाद। यदि आप एसिंक func नहीं चाहते हैं। –

+3

@ जोश आपने मुझे थोड़ा रोया है। कृपया ऐसा कभी मत करो। यदि आप भाग्यशाली हैं तो यह बहुत ही अक्षम होगा। यदि आप दुर्भाग्यपूर्ण हैं: तो आपने अभी एक थ्रेड डेडलॉक किया है। यह सब सिंक संदर्भ पर निर्भर करता है। यदि आप समकालिक रूप से प्रतीक्षा करना चाहते हैं: 'थ्रेड। सो (1000) ' –

+1

उत्तर के लिए धन्यवाद, मुझे नहीं लगता कि आपके पास कहीं भी है और मैं इस बारे में और अधिक पढ़ सकता हूं (मेरा मतलब क्यों है)? (विशेष रूप से थ्रेड भाग को डेडलॉक करें) –

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