कनेक्शन पूल पुनर्गठित

Aspose.Email 19.3 के रिलीज़ के साथ, कनेक्शन पूल को पुनर्गठित किया गया है। नया EmailClient क्लास पेश की गई है जो अंततः इसे बदल देगा CredentialsByHostClient class। यह EmailClient क्लास एक प्रदान करता है ConnectionAsgmtMode प्रॉपर्टी जो मल्टीथ्रेडेड पर्यावरण में कनेक्शन आवंटन मोड को परिभाषित करती है। EmailClient.ConnectionAsgmtMode का उपयोग करके सेट किया जाता है ConnectionAsgmtType enumerable।

कनेक्शन प्रकार

निम्नलिखित तीन कनेक्शन प्रकार हैं:

  • मुख्य कनेक्शन: यह वह कनेक्शन है जो मेल क्लाइंट के साथ बनता और नष्ट होता है। इसे मैन्युअल रूप से बनाया या नष्ट नहीं किया जा सकता।
  • डिफ़ॉल्ट कनेक्शन: उपयोगकर्ता थ्रेड्स के लिए डिफ़ॉल्ट कनेक्शन बना सकता है, साथ CreateConnection विधि। यदि डिफ़ॉल्ट कनेक्शन मौजूद है, तो थ्रेड में निष्पादित सभी ईमेल क्लाइंट विधियों द्वारा यह कनेक्शन स्वचालित रूप से उपयोग किया जाएगा। प्रति थ्रेड केवल एक डिफ़ॉल्ट कनेक्शन हो सकता है। यह मैन्युअल या स्वचालित रूप से बनाया जा सकता है। यह EmailClient.ConnectionAsgmtMode प्रॉपर्टी पर निर्भर करता है। ये कनेक्शन मैन्युअल रूप से बनाए जा सकते हैं, साथ EmailClient.CreateConnection(createAsDefaultConnection = true) विधि। यदि डिफ़ॉल्ट कनेक्शन उपयोग नहीं किया गया (कनेक्शन आवंटन मोड पर निर्भर), तो मुख्य कनेक्शन उसके स्थान पर स्वचालित रूप से उपयोग होता है।
  • स्वतंत्र कनेक्शन: ये वह कनेक्शन हैं जो थ्रेड्स से जुड़े नहीं होते। इन्हें मैन्युअल रूप से बनाया जा सकता है और विधि पैरामीटर के रूप में स्पष्ट रूप से उपयोग किया जाना चाहिए। ये कनेक्शन मैन्युअल रूप से बनाए जा सकते हैं, साथ EmailClient.CreateConnection() विधि या EmailClient.CreateConnection(createAsDefaultConnection = false) विधि।

कनेक्शन आवंटन प्रकार

सेट करने के लिए EmailClient.ConnectionAsgmtMode प्रॉपर्टी, ConnectionAsgmtType enumerable का उपयोग किया गया है। आवंटन प्रकार जो प्रदान किए गए हैं ConnectionAsgmtType नीचे सूचीबद्ध हैं।

  • ConnectionAsgmtType.UseMainOrDefault यह मोड ईमेल क्लाइंट्स में डिफ़ॉल्ट रूप से उपयोग किया जाता है। यदि डिफ़ॉल्ट कनेक्शन नहीं बनाया गया है या विधि पैरामीटर के रूप में स्पष्ट रूप से पास नहीं किया गया है तो ईमेल क्लाइंट कई थ्रेड्स से सभी ऑपरेशनों के लिए मुख्य कनेक्शन का उपयोग करता है। मुख्य कनेक्शन वह कनेक्शन है जो ईमेल क्लाइंट के साथ एक ही समय पर बनाया जाता है। उपयोगकर्ता थ्रेड्स के साथ डिफ़ॉल्ट कनेक्शन बना सकता है, CreateConnection विधि। यदि किसी थ्रेड के लिए डिफ़ॉल्ट कनेक्शन बनाया गया है, तो यह उसी थ्रेड में invoked ईमेल क्लाइंट के सभी विधियों के लिए अस्पष्ट रूप से उपयोग होता है। यदि किसी थ्रेड के लिए डिफ़ॉल्ट कनेक्शन नहीं बनाया गया है, तो मुख्य कनेक्शन उसी थ्रेड में invoked ईमेल क्लाइंट के सभी विधियों के लिए उपयोग होता है। उपयोगकर्ता थ्रेड्स से नहीं जुड़े (डिफ़ॉल्ट नहीं) कनेक्शन भी बना सकता है, इसके साथ CreateConnection विधि। यदि उपयोगकर्ता अन्य कनेक्शन (मुख्य नहीं और डिफ़ॉल्ट नहीं) उपयोग करना चाहता है तो उसे यह कनेक्शन स्पष्ट रूप से उस विधि के पैरामीटर के रूप में पास करना होगा जिसे वह उपयोग करना चाहता है। उपयोगकर्ता अतिरिक्त रूप से कोई भी संख्या में कनेक्शन बना सकता है। डिफ़ॉल्ट कनेक्शन प्रति थ्रेड केवल एक हो सकता है। कृपया ध्यान दें कि डिफ़ॉल्ट कनेक्शन सही ढंग से काम करते हैं यदि उपयोगकर्ता मल्टीटास्किंग प्रोग्रामिंग के लिए Thread वस्तुओं का उपयोग करता है। यदि उपयोगकर्ता ConnectionPool या Task वस्तुओं का उपयोग मल्टीटास्किंग प्रोग्रामिंग के लिए करता है तो यह मोड एप्लिकेशन के गलत व्यवहार का कारण बन सकता है। इस समस्या से बचने के लिए उपयोगकर्ता को कोड निष्पादन के अंत में डिफ़ॉल्ट कनेक्शन (यदि वह उपयोग करता है) को मैन्युअल रूप से डिस्पोज़ करना होगा।
  • ConnectionAsgmtType.UseMain ईमेल क्लाइंट कई थ्रेड्स से सभी ऑपरेशनों के लिए मुख्य कनेक्शन का उपयोग करता है। मुख्य कनेक्शन वह कनेक्शन है जो ईमेल क्लाइंट के साथ एक ही समय पर बनाया जाता है। उपयोगकर्ता डिफ़ॉल्ट कनेक्शन नहीं बना सकता। उपयोगकर्ता थ्रेड्स से जुड़े नहीं (डिफ़ॉल्ट नहीं) कनेक्शन बना सकता है, इसके साथ CreateConnection विधि। यदि उपयोगकर्ता अन्य कनेक्शन (मुख्य नहीं और डिफ़ॉल्ट नहीं) उपयोग करना चाहता है तो उसे यह कनेक्शन स्पष्ट रूप से उस विधि के पैरामीटर के रूप में पास करना होगा जिसे वह उपयोग करना चाहता है। 
  • ConnectionAsgmtType.UseDefault ईमेल क्लाइंट कई थ्रेड्स से सभी ऑपरेशनों के लिए केवल डिफ़ॉल्ट कनेक्शन को अस्पष्ट रूप से उपयोग करता है। इस मोड में मुख्य कनेक्शन उपयोग नहीं होता। यदि किसी थ्रेड के लिए डिफ़ॉल्ट कनेक्शन नहीं बनाया गया है (ईमेल क्लाइंट विधि का पहला आह्वान), तो ईमेल क्लाइंट पहला ऑपरेशन चलाने से पहले उस थ्रेड के लिए डिफ़ॉल्ट कनेक्शन को स्वचालित रूप से बनाता है। उपयोगकर्ता थ्रेड्स के साथ डिफ़ॉल्ट कनेक्शन नहीं बना सकता CreateConnectionविधि क्योंकि वे स्वचालित रूप से बनते हैं। जब किसी थ्रेड के लिए डिफ़ॉल्ट कनेक्शन बनाया जाता है, तो यह उसी थ्रेड में invoked ईमेल क्लाइंट के सभी विधियों के लिए अस्पष्ट रूप से उपयोग होता है। उपयोगकर्ता थ्रेड्स से नहीं जुड़े (डिफ़ॉल्ट नहीं) कनेक्शन भी बना सकता है, इसके साथ CreateConnectionविधि। यदि उपयोगकर्ता अन्य कनेक्शन (मुख्य नहीं और डिफ़ॉल्ट नहीं) उपयोग करना चाहता है तो उसे यह कनेक्शन स्पष्ट रूप से उस विधि के पैरामीटर के रूप में पास करना होगा जिसे वह उपयोग करना चाहता है। उपयोगकर्ता अतिरिक्त रूप से कोई भी संख्या में कनेक्शन बना सकता है। प्रति थ्रेड केवल एक डिफ़ॉल्ट कनेक्शन उपयोग किया जा सकता है। कृपया ध्यान दें कि डिफ़ॉल्ट कनेक्शन सही ढंग से काम करते हैं यदि उपयोगकर्ता मल्टीटास्किंग प्रोग्रामिंग के लिए Thread वस्तुओं का उपयोग करता है। यदि उपयोगकर्ता ConnectionPool या Task वस्तुओं का उपयोग मल्टीटास्किंग प्रोग्रामिंग के लिए करता है तो यह मोड एप्लिकेशन के गलत व्यवहार का कारण बन सकता है। इस समस्या से बचने के लिए उपयोगकर्ता को कोड निष्पादन के अंत में डिफ़ॉल्ट कनेक्शन को मैन्युअल रूप से डिस्पोज़ करना होगा।