मुझे यकीन नहीं है कि कौन सी रणनीति अपनाने के लिए है ... मैं अपने ऑपरेशन को पूरा करने पर ध्यान केंद्रित कर रहा हूं, लेकिन मैं प्रदर्शन समस्याओं को भी एक मिनट में रखना चाहता हूं। .. निष्पादित एक विधि है() जिसे एक ऑपरेशन पूरा होने तक प्रतीक्षा (सिंक्रनाइज़ेशन चलाएं) है। यह ऑपरेशन एक और धागे पर होता है। वहाँ एक ही बात लागू करने के लिए 2 तरीके ...मैनुअल रीसेट इवेंट या थ्रेड के बीच एक विकल्प बनाने के लिए। नींद()
ManualResetEvent
void Execute()
{
taskHandle = new ManualResetEvent(false);
.
.
//delegate task to another thread
.
.
taskHandle.WaitOne();
}
या
का उपयोग कर एक सरल का उपयोग करके तक जबकि
void Execute()
{
.
.
//delegate task to another thread
.
.
while (!JobCompleted)
Thread.Sleep(1000);
}
कौन से दो तरीकों में से एक का निर्माण कर रहे हैं क्या मुझे अपनाना चाहिए ... क्यों?
संपादित करें:
प्रश्न 2। अगर मैं सिर्फ खाली था तो क्या होगा? क्या फर्क पड़ता है...?
while(!JobCompleted);
संपादित करें: (कुछ मैंने पहले इकट्ठा)
http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml - यह लेख का कहना है manualresets अपेक्षाकृत धीमी है क्योंकि वे में प्रबंधित कोड से बाहर जाने के लिए और वापस आ रहे हैं ...
बस थ्रेड को इंगित करना चाहते हैं। नींद (0) उपयोग। इंगित करने के लिए शून्य (0) निर्दिष्ट करें कि यह थ्रेड अन्य प्रतीक्षा धागे को निष्पादित करने की अनुमति देने के लिए निलंबित किया जाना चाहिए। इस मामले में नींद (0) नींद (1000) से बेहतर है, लेकिन वेटहैंडल का उपयोग करना अभी भी अधिक उपयुक्त है। –
खाली जबकि लूप मूल रूप से एक स्पिनवाइट है - यह पूरी तरह से एक सीपीयू का उपभोग करेगा। सिफारिश नहीं की गई। – nitzmahone