मुझे NetworkStream
से पढ़ने की आवश्यकता है जो डेटा को यादृच्छिक रूप से भेज देगा और डेटा पैकेट का आकार भी अलग-अलग रहेगा। मैं एक बहु थ्रेडेड एप्लिकेशन को कार्यान्वित कर रहा हूं जहां प्रत्येक धागे से पढ़ने के लिए अपनी स्ट्रीम होगी। यदि स्ट्रीम पर कोई डेटा नहीं है, तो एप्लिकेशन को डेटा आने की प्रतीक्षा करनी चाहिए। हालांकि, यदि सर्वर डेटा भेज रहा है और सत्र समाप्त कर दिया गया है, तो इसे बाहर निकलना चाहिए।NetworkStream.Read() और NetworkStream.BeginRead() के बीच अंतर?
प्रारंभ में मैंने स्ट्रीम से डेटा प्राप्त करने के लिए Read
विधि का उपयोग किया था, लेकिन यह थ्रेड को अवरुद्ध करने और स्ट्रीम पर डेटा दिखाई देने तक प्रतीक्षा करता था।
MSDN पर प्रलेखन पता चलता है,
तो कोई डेटा पढ़ने के लिए उपलब्ध है, पढ़ें विधि देता है 0. दूरस्थ होस्ट कनेक्शन, बंद हो जाता है और सभी उपलब्ध डेटा किया गया है प्राप्त करते हैं , रीड विधि तुरंत पूर्ण करती है और शून्य बाइट्स लौटाती है।
लेकिन मेरे मामले में, मुझे Read
विधि 0 वापस करने और कृपा से बाहर निकलने के लिए कभी नहीं मिला है। यह बस अनिश्चित काल तक इंतजार कर रहा है।
मेरी आगे की जांच में, मैं BeginRead
पर आया जो धारा को देखता है और जैसे ही यह डेटा प्राप्त करता है, कॉलबैक विधि को अतुल्यकालिक रूप से आमंत्रित करता है। मैंने इस दृष्टिकोण का उपयोग करके विभिन्न कार्यान्वयनों को भी देखने की कोशिश की है, हालांकि, BeginRead
का उपयोग करने पर मैं Read
के विपरीत लाभकारी होने पर पहचानने में असमर्थ था।
जैसा कि मैंने इसे देखा है, BeginRead
में एसिंक कॉल होने का सिर्फ लाभ है, जो वर्तमान धागे को अवरुद्ध नहीं करेगा। लेकिन मेरे आवेदन में, मेरे पास स्ट्रीम से डेटा को पढ़ने और संसाधित करने के लिए पहले से ही एक अलग धागा है, जिससे मेरे लिए बहुत अंतर नहीं आएगा।
किसी को भी कृपया मदद कर सकते हैं मुझे
BeginRead
लिए प्रतीक्षा करें और बाहर निकलें प्रणाली को समझने और यह कैसेRead
से अलग है?वांछित कार्यक्षमता को लागू करने का सबसे अच्छा तरीका क्या होगा?
क्या आप वाकई रिमोट साइड कनेक्शन को बंद कर रहे हैं? मुझे 'रीड' वापस लौटने में कोई समस्या नहीं है। आपका दृष्टिकोण अन्यथा सही दिशा प्रतीत होता है। –
@ मैथ्यू वैसे, ईमानदारी से, मैं निश्चित रूप से यह नहीं कह सकता। यह एक तीसरी पार्टी सेवा है जिसे हम पढ़ रहे हैं। उन्होंने शटडाउन समय निर्दिष्ट किया है और हम मानते हैं कि यह उल्लेख के अनुसार होता है। मैं सिर्फ उन्हें झंडा उठाने से पहले अपने अंत में जांचना और दोबारा जांचना चाहता हूं। –