प्रश्नों की संख्या, फ़ोरम पोस्ट इत्यादि के आधार पर, ऐसा लगता है कि बीसीएल में टीसीपी क्लाइंट/नेटवर्कस्ट्रीम कार्यान्वयन में आईओ ऑपरेशंस को रद्द करने के लिए सभ्य समर्थन नहीं है। .NET 4.5 में Async विधियों के अतिरिक्त के साथ, रद्दीकरण (या सभ्य टाइमआउट समर्थन) की यह कमी चीजों को और भी निराशाजनक बनाती है क्योंकि यह एक कार्य को रद्द करने के लिए और भी जटिल (असंभव पर निकट) बन जाता है जो IO प्रदर्शन करते समय रद्द करने के लिए अस्वीकार कर देता है ।.NET TcpClient/NetworkStream कार्यान्वयन जो एसिंक ऑपरेशंस का समर्थन करता है और टाइमआउट्स का सम्मान करता है
मैंने कई कार्यान्वयन देखा है जो नेटवर्क ऑपरेशन की निगरानी के लिए अतिरिक्त धागे को स्पिन करते हैं और यदि चीजें गलत होने लगती हैं तो अंतर्निहित धारा को बंद कर दें। यह ऐसी दुनिया में बहुत गंदा लगता है जहां हम एसिंक ऑपरेशंस का उपयोग करके इन संसाधनों को संरक्षित करने की कोशिश कर रहे हैं।
क्या कोई मुझे मार्गदर्शन की दिशा में इंगित कर सकता है क्योंकि नेटवर्क आईओ संचालन को कुशलता से रद्द/समय से निपटने या वास्तव में काम करने वाले एक मजबूत तृतीय पक्ष कार्यान्वयन की दिशा में?
मैंने सोचा था कि CancelIo/CancelIoEx गया ओएस स्तर के कार्यों के बजाय लोगों को लागू करने के लिए ड्राइवरों पर निर्भर/उनका समर्थन,:
यहाँ मुद्दे के बारे में एक गहन चर्चा है? – Andrew
वे Win32 एपीआई हैं जो कर्नेल को कॉल करते हैं जो ड्राइवर को कॉल करते हैं। यदि आप एक बड़ा पठन रद्द करते हैं, तो ड्राइवर को डिस्क को रोकने के लिए सहयोग करके सहयोग करने की आवश्यकता होती है। CancelIO भौतिक प्रभाव है। – usr
इस दिशा में मुझे धक्का देने के लिए धन्यवाद। मैंने पाया कि CancelIo/CancelIoEx ओएस-स्तर थे और ड्राइवर-स्तर समर्थन की आवश्यकता नहीं थी। इसके आस-पास थोड़ा और शोध करने के बाद, मैं इस पोस्ट में आया (मुझे पता नहीं है कि मैंने इसे पहले कैसे याद किया) जो एसिंक आईओ को रद्द करने की चुनौतियों पर चर्चा करता है। ऐसा प्रतीत होता है कि फाइल-आधारित आईओ ओवरहाल पाने के लिए लाइन में है लेकिन नेटवर्किंग नहीं है। http://social.msdn.microsoft.com/Forums/da-DK/async/thread/54632b19-0e9c-4078-aa59-c4389e75b187 – Andrew