2010-11-27 12 views
5

मेरे पास एक धागा है जो TcpListener.AcceptTcpClient() पर प्रतीक्षा करता है, जो ब्लॉक, जिसे मैं कभी-कभी निलंबित करना चाहता हूं।अप्रचलित थ्रेड के बिना अवरुद्ध थ्रेड को कैसे निलंबित करें। सस्पेंड?

मैंने Monitor.Wait(...) पढ़ा है, लेकिन मुझे केवल म्यूटेक्स के साथ काम करने का अनुभव है और यदि थ्रेड ब्लॉकिंग विधि पर इंतजार कर रहा है, तो यह दिलचस्प हो जाता है।

अब Thread.Suspend(...) अप्रचलित है, मुझे धागे को कैसे निलंबित करना चाहिए?

+1

यदि थ्रेड पहले ही अवरुद्ध है, तो इसे निलंबित करने का कोई मतलब नहीं है। क्या आप विस्तृत कर सकते हैं। –

+0

ठीक है, मैं देखता हूं कि आपका क्या मतलब है। मैं नहीं चाहता कि धागा किसी भी आने वाले टीसीपी कनेक्शन का उपभोग करे और जब मैं इसे "निलंबित" करता हूं तो किसी भी संसाधन का उपयोग न करें। यदि यह पहले से ही मामला है, तो 'AcceptTcpClient' रिटर्न के बाद' निलंबित 'ध्वज सेट करना और उस पर प्रतीक्षा करना होगा? –

उत्तर

2

यह संभव नहीं है, यह एक असफल दौड़ की स्थिति है। इससे पहले कि आप इसे निलंबित करना चाहते हैं, श्रोता एक माइक्रोसेकंड कनेक्शन को स्वीकार कर सकता था। श्रोता को बंद करना ताकि यह किसी भी कनेक्शन को स्वीकार नहीं करेगा, केवल एकमात्र निश्चित तरीका है।

यहां अपने तर्क को पुनः देखें। जो कुछ भी उस कनेक्शन के साथ करने जा रहा है जो आपको इसे रोकना चाहता है, उसे इसके बजाय लॉक करने की आवश्यकता है।

+0

थ्रेड से छुटकारा पाने और एसिंक्रोनस 'BeginAcceptTcpClient' का उपयोग करके हल किया गया। –

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