बाहर किया जाए या नहीं मैं async तरीकों का उपयोग करना चाहिए नहीं समझ या करने की कोशिश कर जैसे:क्या पहले से ही अलग थ्रेड पर एसिंक प्रारंभ/समाप्ति विधियों का उपयोग करना आवश्यक है?
और
उनके सिंक्रोनस TcpListener.AcceptTcpClient
और NetworkStream.Read
संस्करणों के विपरीत। मैं संबंधित धागे देख रहा हूं लेकिन मैं अभी भी एक चीज़ के बारे में कुछ अनिश्चित हूं:
प्रश्न: एसिंक्रोनस विधि का उपयोग करने का मुख्य लाभ यह है कि जीयूआई लॉक नहीं है। हालांकि, इन विधियों को अलग Task धागे पर बुलाया जाएगा क्योंकि ऐसा इसलिए कोई खतरा नहीं है। इसके अलावा, TcpListener.AcceptTcpClient
एक कनेक्शन बनने तक धागे को अवरुद्ध करता है इसलिए कोई बर्बाद CPU चक्र नहीं होता है। चूंकि यह मामला है, तो इतने सारे हमेशा एसिंक संस्करणों का उपयोग करने की सलाह क्यों देते हैं? ऐसा लगता है कि इस मामले में सिंक्रोनस संस्करण बेहतर होंगे?
इसके अलावा, एसिंक्रोनस विधियों का उपयोग करने का एक और नुकसान बढ़ती जटिलता और वस्तुओं का निरंतर कास्टिंग है। उदाहरण के लिए, यह करने के लिए होने के लिए:
private void SomeMethod()
{
// ...
listener.BeginAcceptTcpClient(OnAcceptConnection, listener);
}
private void OnAcceptConnection(IAsyncResult asyn)
{
TcpListener listener = (TcpListener)asyn.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(asyn);
}
के रूप में इस का विरोध किया:
TcpClient client = listener.AcceptTcpClient();
भी ऐसा लगता है async संस्करणों वजह से एक और धागा बनाने के लिए होने के लिए और अधिक भूमि के ऊपर होगा। (असल में, प्रत्येक कनेक्शन में धागा होता है और फिर उस धागे को पढ़ने के लिए एक और धागा भी होता है। थ्रेडप्शन!)
इसके अलावा, टीसीपी लिस्टनर की मुक्केबाजी और अनबॉक्सिंग और निर्माण, प्रबंधन और समापन से जुड़े ओवरहेड ये अतिरिक्त धागे।
असल में, जहां आमतौर पर व्यक्तिगत क्लाइंट कनेक्शन को संभालने के लिए व्यक्तिगत धागे होते हैं, अब वहां और उसके बाद प्रत्येक प्रकार के ऑपरेशन के लिए अतिरिक्त थ्रेड होता है (स्ट्रीम डेटा पढ़ना/लिखना और सर्वर के अंत में नए कनेक्शन सुनना)
अगर मैं गलत हूं तो कृपया मुझे सही करें। मैं अभी भी थ्रेडिंग के लिए नया हूं और मैं यह सब समझने की कोशिश कर रहा हूं। हालांकि, इस मामले में ऐसा लगता है कि सामान्य सिंक्रोनस विधियों का उपयोग करना और थ्रेड को अवरुद्ध करना इष्टतम समाधान होगा?