select - Can I force termination a goroutine without waiting for it to return? -


मुझे एक उदाहरण का उपयोग करें:

  func WaitForStringOrTimeout () (स्ट्रिंग, त्रुटि) { My_channel: = बनाने (चैन स्ट्रिंग) प्रतीक्षा करेंफॉस्ट्रस्ट (my_channel) का चयन करें {case found_string: = & lt; -my_channel: return found_string, शून्य मामले & lt; -time.After (15 * time.Minute): वापसी शून्य, त्रुटियाँ। "स्ट्रिंग के लिए इंतजार करना समाप्त हो गया है")}}  

इस सरल उदाहरण में, मेरे पास कुछ फ़ंक्शन WaitForString है जो कुछ समय के लिए ब्लॉक करता है और अंततः एक स्ट्रिंग लौटा सकता है। मैं इस कोड के साथ WaitForString लपेट करना चाहता हूं जो कि एक त्रुटि के साथ एक ही स्ट्रिंग या समय देता है।

यदि कोई स्ट्रिंग जल्दी से मिलती है, तो वहां एक गोरटिन है जो कि 15 मिनट की नींद वक्तव्य के साथ चल रहा है या कहीं इस कचरा को किसी तरह एकत्र किया है?

यदि समय समाप्त होता है और एक स्ट्रिंग कभी नहीं मिलती है, क्या अभी भी एक गोरटिन चल रहा है WaitForString, भले ही कोई अन्य दिनचर्या न हो जो इसे आउटपुट देख सकें? क्या होगा अगर WaitForString बहुत सारी मेमोरी को आवंटित करता है लेकिन कभी भी रिटर्न नहीं करता?

क्या कोई रास्ता है कि मैं WaitForString () को समय समाप्ति के बारे में जागरूक कर सकता हूं और हार सकता हूं?

सामान्य तौर पर, एक और गोरटिने को रोकने का कोई तरीका नहीं है एक ऐसा समारोह है जिसे वर्तमान गोरौटाइन को बाहर निकलने का कारण बनने के लिए इस्तेमाल किया जा सकता है (भले ही उसे एक गहरी कॉल फ़्रेम से बुलाया गया हो), लेकिन कुछ अन्य गोरटिनेन्स को बाहर करने के लिए कारण नहीं है।

> समय मॉड्यूल, प्रत्येक टाइमर या टिकर से निपटने के लिए एक पृथक गोरटिनेइन नहीं है: इसके बजाय, टाइमर को रनटाइम द्वारा प्रबंधित किया जाता है, ताकि यह बता सके कि अगली बार जागने की आवश्यकता है।

यदि यह एक समस्या है, तो time.NewTimer के बजाय Time.After , और वापस आने पर टाइमर मैन्युअल रूप से रोकें। उदाहरण के लिए:

  t: = समय.नवीन टाइमर (15 * समय। मिनट) defer t.Stop () का चयन करें {case found_string: = & lt; -my_channel: return found_string, nil case & lt; -टीसी: वापसी शून्य, त्रुटियाँ.नई ("स्ट्रिंग के लिए इंतजार करना समाप्त समय")}  

टाइम.ऐन्टर सटीक आवधिक व्यवहार के लिए वास्तव में उपयोगी है, जबकि < कोड> समय.नाना टाईमर सरल समय-सीमा के लिए ठीक काम करता है।


Comments

Popular posts from this blog

ios - How do I use CFArrayRef in Swift? -

eclipse plugin - Run java code error: Workspace is closed -

c - Error on building source code in VC 6 -