हमारे पास एक फ़ंक्शन है जिसे एक सिंगल थ्रेड कहते हैं (हम इसे मुख्य थ्रेड नाम देते हैं)। फ़ंक्शन के शरीर के भीतर हम सीपीयू के गहन काम करने के लिए कई कार्यकर्ता थ्रेड्स को स्पॉन करते हैं, सभी थ्रेड्स समाप्त होने की प्रतीक्षा करते हैं, फिर मुख्य धागे पर परिणाम लौटाते हैं।
इसका परिणाम यह होता है कि कॉल करने वाला फ़ंक्शन का उपयोग भोलेपन से कर सकता है, और आंतरिक रूप से यह कई कोर का उपयोग करेगा।
अभी तक सभी अच्छे हैं ।।
हमारे पास जो समस्या है वह अपवादों से निपट रही है। हम अनुप्रयोग को क्रैश करने के लिए कार्यकर्ता थ्रेड पर अपवाद नहीं चाहते हैं। हम चाहते हैं कि फ़ंक्शन मुख्य थ्रेड पर उन्हें पकड़ने में सक्षम हो। हमें वर्कर थ्रेड्स पर अपवादों को पकड़ना होगा और उन्हें मुख्य थ्रेड में फैलाना होगा ताकि वे वहां से आगे बढ़ते रहें।
हम ऐसा कैसे कर सकते हैं?
सबसे अच्छा मैं सोच सकता हूँ:
- हमारे कार्यकर्ता धागे (std :: अपवाद और हमारे अपने कुछ) पर अपवादों की एक पूरी विविधता को पकड़ो।
- अपवाद के प्रकार और संदेश को रिकॉर्ड करें।
- मुख्य थ्रेड पर एक संबंधित स्विच स्टेटमेंट है, जो वर्कर थ्रेड पर दर्ज किए गए किसी भी प्रकार के अपवादों को पुनर्परिभाषित करता है।
इसमें अपवाद प्रकारों के सीमित सेट का समर्थन करने का स्पष्ट नुकसान है, और जब भी नए अपवाद प्रकार जोड़े जाते हैं तो उन्हें संशोधन की आवश्यकता होगी।