2014-07-24 6 views
5

सी # दस्तावेज पढ़ रहा है, मुझे आश्चर्य है कि आईओ अवरुद्ध होने पर या नहीं जानता कि कोई कैसे जान सकता है। उदाहरण के लिए BinaryWriter.Write विधि, मुझे दस्तावेज़ीकरण पर कोई जानकारी नहीं मिल रही है कि विधि अवरुद्ध हो रही है या नहीं।हम कैसे जानते हैं कि आईओ अवरुद्ध या गैर-अवरुद्ध

+1

मुझे लगता है कि अंगूठे का एक सुरक्षित नियम मानना ​​है कि विधियां सिंक्रोनस हैं जब तक दस्तावेज़ स्पष्ट रूप से बताते हैं कि वे एसिंक हैं। फ्रेमवर्क का उपयोग करने वाला एक और पैटर्न "Async" के साथ async विधियों को प्रत्ययित करना है, या BeginXXX/EndXXX विधि जोड़े प्रदान करना है। –

उत्तर

6

BinaryWriter.Write केवल अपना काम पूरा होने पर ही लौटाता है। इससे यह अवरुद्ध हो जाता है। प्रतीक्षा समय संभावित रूप से unbounded है।

असिंक्रोनस विधियों को आमतौर पर स्पॉट करना आसान होता है क्योंकि वे Task या IAsyncResult (जो पुराने एपीएम पैटर्न से मेल खाते हैं) लौटाते हैं। उन्हें उचित रूप से नामित किया जाता है (BeginXxx या XxxAsync)। जब ऐसी विधि वापस आती है तो आपके पास अभी तक परिणाम नहीं है। यह आपको इंगित करता है कि गणना अभी भी अधूरा है।

दस्तावेज़ इस संपत्ति को async विधियों के लिए कॉल करते हैं। चूंकि लगभग सभी विधियां अवरुद्ध और तुल्यकालिक हैं (उदा। सभी स्ट्रिंग विधियां) इस व्यवहार को दस्तावेज़ों में नोट नहीं किया गया है। यह डिफ़ॉल्ट है।

1

चूंकि यह BeginWrite और इसके संबंधित EndWrite विधियों को प्रदान नहीं करता है, इसे अवरुद्ध करना होगा।

संबंधित मुद्दे