c# - Will .Net Garbage Collect an object that's not referenced, but has a thread that's doing work? -
मेरे पास निम्न कोड है (पठनीयता के लिए कटौती):
मुख्य वर्ग: < / मजबूत>
सार्वजनिक स्टार्टप्रक्रिया () {थिंकर वें = नया थिचर (); वें। डन टिंकिंग + = नया थिचर। प्रसंस्करणपूर्ण (थिंकरफिनिश्ड); th.StartThinking (); } शून्य ThinkerFinished () {Console.WriteLine ("विचारक समाप्त"); }
थिंकर क्लास:
सार्वजनिक वर्ग के विचारक {निजी सिस्टम। टाइम्स। टिमर टी; सार्वजनिक प्रतिनिधि शून्य प्रसंस्करण समाप्त (); सार्वजनिक घटना प्रसंस्करण समाप्त हो चुकी है; पृष्ठभूमिवर्कर पृष्ठभूमिथाफ्रेड; लोक थिचर () {} पब्लिक स्टार्ट टिंकींग () {t = नया सिस्टम। टिमर्स। टिमर (5000); // 5 सेकंड टाइमर t.AutoReset = false; T.Elapsed + = नया सिस्टम। टाईमर। एस्प्लेडएवेंटहैंडलर (t_Elapsed); t.Start (); // सोच पृष्ठभूमि करने के लिए एक पृष्ठभूमि थ्रेड प्रारंभ करें धागा = नया पृष्ठभूमिवर्क (); BackgroundThread.DoWork + = नए DoWorkEventHandler (BgThread_DoWork); backgroundThread.RunWorkerAsync (); } शून्य t_Elapsed (ऑब्जेक्ट प्रेषक, System.Timers.ElapsedEventArgs ई) {DoneThinking (); } BgThread_DoWork (ऑब्जेक्ट प्रेषक, DoWorkEventArgs ई) {// यहां काम 5 सेकंड से भी कम समय के लिए जाना चाहिए / यह मर जाएगा अगर यह टी। नहीं करता है (); DoneThinking (); }}
मुझे जो मूल रूप से होने की उम्मीद थी, वह यह था कि मुख्य वर्ग में ईवेंट हैंडलर ने विचारक को कचरे से एकत्रित करने से रोक दिया।
।
< P> अब मैं सोच रहा हूं कि क्या इस धागे को "व्यस्त" है या नहीं, चाहे कचरा संग्रह हो जाएगा या नहीं दूसरे शब्दों में, क्या यह एक मौका है कि 5 सेकंड टाइमआउट समाप्त हो जाने से पहले कचरा एकत्र किया जा सकता है?इसे एक और तरीके से रखने के लिए, कचरा कलेक्टर को यह प्रक्रिया समाप्त करने से पहले अपने विचारक को एकत्र करने के लिए संभव है?
नहीं, एक धागा जब तक संदर्भित है, तब तक उसे जीना माना जाता है, और जो भी चल रहा है संदर्भित माना जाता है (IIRC एक चल धागा इसकी जीसी रूट के रूप में पंजीकृत करता है, और यह स्टैक थ्रेड का संदर्भ देगा)।
उस ने कहा कि मैं आपके उदाहरण को देख रहा हूं और मुझे नहीं पता है कि आप कहां मान लें कि कोई धागा पैदा हो रहा है?
Comments
Post a Comment