2013-03-11 7 views
6

में सख्ती से लागू की गई है, जो सी # प्रोग्रामर के रूप में "चीजें कैसे काम करती है" की खोज में रुचि रखते हैं, मुझे इस प्रक्रिया के बारे में कुछ और समझने में दिलचस्पी है जो नई async सुविधा कार्य करता है।क्या नई सी # एसिंक सुविधा कम्पाइलर

मैं async पर एरिक Lippert उत्तम लेख श्रृंखला का पालन किया है: Async blog posts

मैं इस तथ्य को छोड़कर कहीं पर (एक उच्च स्तर में) इस सुविधा के कार्यान्वयन के लिए किसी भी संदर्भ देखकर याद नहीं है "संकलक है हमारे लिए काम कर रहे हैं "।

क्या यह सुविधा सख्ती से एक कंपाइलर सुविधा है? क्या संकलक कुछ तरीके से कोड को फिर से लिखता है और यही वह है? या क्या रनटाइम समर्थन जैसी अन्य चीजें हैं जो ऐसा करती हैं?

उत्तर

20

नहीं, यह संकलक में पूरी तरह से नहीं है। यह INotifyCompletion जैसे कुछ नए इंटरफेस पर निर्भर करता है और कुछ ढांचे कार्यान्वयन समर्थन जैसे AsyncTaskMethodBuilder। मुझे विश्वास नहीं है कि हालांकि कोई सीएलआर परिवर्तन आवश्यक है।

कंपाइलर बहुत काम करता है, एक राज्य मशीन का निर्माण - यह सिर्फ राज्य मशीन के भीतर उन कुछ प्रकारों को संदर्भित करता है। ओह, और बहुत सारे Task-संबंधित प्रकार मुख्य रूप से प्रदर्शन कारणों से संशोधित किए गए थे।

मेरे पास series of blog posts है जो प्रारंभ में सीटीपी के खिलाफ लिखा गया था लेकिन केवल वेनिला .NET 4 और कुछ वर्गों का उपयोग करके मैंने स्वयं को मार डाला। वे उत्पादन कार्यान्वयन के खिलाफ काम नहीं करेंगे (क्योंकि चीजें समय के साथ थोड़ी-थोड़ी बदल गई हैं) लेकिन वे आपको दृश्यों के पीछे क्या चल रहा है इसका एक सामान्य प्रभाव देंगे।

+2

FGITW ब्लॉग पोस्ट के * श्रृंखला * के साथ बैक अप लिया। मुश्किल से ऊपर नहीं उठाना मुश्किल है। मैं अभी भी आपकी एडुलिनक श्रृंखला के माध्यम से काम कर रहा हूं। –

+2

मुझे याद नहीं है कि सीएलआर में कोई बदलाव आया है लेकिन मैं उस बारीकी से पालन नहीं कर रहा था। स्टीफन निश्चित रूप से पता चल जाएगा। –

+0

@EricLippert: पिछले संस्करणों के लिए [async लक्ष्यीकरण पैक] (http://nuget.org/packages/Microsoft.Bcl.Async) को देखते हुए यह कम से कम चीजों को मुश्किल बना देगा। निश्चित रूप से 4.5 सीएलआर पर * बेहतर * बनाने के लिए अनुकूलन हो सकते हैं :) –

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