2010-06-20 16 views
14

क्या कोई मुझे बता सकता है कि शुरुआत [...]/अंत [...] asynchronous एपीआई पैटर्न और बीच के बीच क्या अंतर है बाद में [...] .NET 3.5 में Async पैटर्न?के बीच अंतर [...] Async और शुरू [...] .net asynchronous एपीआई

  • बाद में क्यों बनाया गया था?
  • कोई दूसरे पर एक पैटर्न क्यों पसंद करेगा?

उदाहरण के लिए, सॉकेट.बिनिनएसेप्ट() और सॉकेट.एसेप्टएसिंक()।

उत्तर

10

MSDN का जवाब देंगे कि मुझे तुलना में बेहतर:

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

इन संवर्द्धन की मुख्य विशेषता उच्च मात्रा अतुल्यकालिक सॉकेट दौरान दोहराया आवंटन और वस्तुओं के तुल्यकालन से बचाव है मैं/हे। शुरू/अंत डिज़ाइन पैटर्न वर्तमान में System.Net.Sockets.Socket वर्ग द्वारा कार्यान्वित एक System.IAsyncResult वस्तु प्रत्येक अतुल्यकालिक सॉकेट आपरेशन के लिए आवंटित किया की आवश्यकता है।

15

ध्यान दें कि (इसी *Completed घटनाओं के साथ) सबसे *Async तरीकों Event-Based Asynchronous Pattern उपयोग कर रहे हैं। पुराना (लेकिन अभी भी पूरी तरह से मान्य) Begin* और End*Asynchronous Programming Model नामक एक पैटर्न है। Socket कक्षा इस नियम का अपवाद है; इसकी *Async विधियों में कोई संबंधित घटना नहीं है; यह अनिवार्य रूप से अत्यधिक स्मृति आवंटन से बचने के लिए एपीएम किया जाता है।

एपीएम और ईबीएपी के बीच सबसे बड़ा अंतर धागा पूर्णता अधिसूचना के लिए उपयोग किया जाता है। एपीएम थ्रेड पूल थ्रेड पर वापस कॉल करेगा (जब तक कि अनुरोध सिंक्रनाइज़ नहीं हो जाता)। ईबीएपी यूआई थ्रेड पर वापस कॉल करने के लिए एक क्रॉस-फ्रेमवर्क रणनीति का उपयोग करेगा (यदि ऑपरेशन यूआई थ्रेड से शुरू किया गया था)।

हालांकि, Task Parallel Library के आधार पर एपीएम और ईबीएपी दोनों को अधिक लचीला दृष्टिकोण के साथ प्रतिस्थापित किया जा रहा है। चूंकि टीपीएल आसानी से एपीएम लपेट सकता है, इसलिए पुराने वर्गों को सीधे अपडेट नहीं किया जाएगा; पुरानी एपीएम विधियों के लिए Task समकक्ष प्रदान करने के लिए एक्सटेंशन विधियों का उपयोग किया जाता है।

अपडेट 2012-07-14: जब मैंने कहा था कि "पुराने वर्गों को सीधे अपडेट नहीं किया जाएगा" तो मैं गलत था। प्रदर्शन कारणों से, बीसीएल/टीपीएल टीमों ने प्रत्येक बीसीएल प्रकार की समीक्षा करने और विस्तार विधियों का उपयोग करने के बजाय सीधे टीएपी विधियों को जोड़ने का फैसला किया। ये परिवर्तन .NET 4.5 में होंगे।

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