2016-03-05 13 views
5

इस सूत्र पर टिप्पणियों में से एक: Checking condition and calling continuous method with periods of delay unity ने कहा कि:सी # मुझे कभी कोरआउट का उपयोग क्यों नहीं करना चाहिए?

कभी कभी coroutines का उपयोग कभी नहीं। वे सी # डेवलपर के रूप में दृष्टि से दृष्टि से बुरी आदतों को पढ़ते हैं और यदि आप नियमित सी # नौकरी

मेरा प्रश्न है, यह क्यों है? क्या यह सिर्फ एकता में है या सामान्य में? यूनिटी के आधिकारिक वर्चुअल रियलिटी नमूने https://www.assetstore.unity3d.com/en/#!/content/51519 इनवॉक या इनवॉक रीपेटिंग के बजाय उन्हें बहुत भारी (विशेष रूप से फ्लायर उदाहरण) का उपयोग करते हैं, इन नमूना परियोजनाओं को हाल ही में जारी किया गया था।

+0

हाय मार्टिन, कोरी के स्पष्टीकरण के लिए अतिरिक्त, शुरुआती लोगों के लिए काफी सरल *** 99% मामलों में व्यक्ति एक कोरआउटिन का उपयोग करने का एकमात्र कारण है, अविश्वसनीय रूप से बस, *** उन्हें नहीं पता कि वहां एक है कॉल करें और आमंत्रित करें कॉल दोहराएं *** या दूसरी बात यह है कि *** वे एकता में अपडेट कॉल *** के बारे में नहीं जानते हैं। यह ईमानदारी से बस इतना आसान है। ध्यान दें कि (यदि आप एक विशेषज्ञ हैं) तो *** *** को जहां उचित हो, आमंत्रित/पुनरावृत्ति का उपयोग करना होगा, और आप पूरी तरह से समझते हैं कि अपडेट और कोरआउट *** एक ही बात है ***। – Fattie

+0

एक समानता बनाने के लिए, यह सी में "++" ऑपरेटर की तरह थोड़ा सा है। (ए) यह एक चौंकाने वाला बुरा विचार है, 1000 शौकिया शुरुआती सॉफ़्टवेयर इंजीनियरिंग (बी) में सबसे खराब विचार, शायद 2 का एक संकेत है जिसका मतलब है, ++ ए और एक ++, और अन्य subtleties (सी) * के बीच का अंतर *, कभी-कभी विशेषज्ञ एल्गोरिदम, या जैसा इंगित करने के लिए इसे शॉर्टेंड के रूप में उपयोग करेंगे। – Fattie

+0

(आप "एकता के लॉल नमूने" का जिक्र करते हैं, सभी एकता डॉकू और नमूने एक मजाक से परे हैं, जो बेकारता में एक उद्योग कथा है। ध्यान दें कि यह * आभासी वास्तविकता * नमूना है, भलाई के लिए: 99.9 99% * शुरुआती * संबंधित प्रश्न "coroutines!" के लिए इस तरह हैं: http://stackoverflow.com/a/35807346/294884) – Fattie

उत्तर

7

यह एकता की बात है, हालांकि सलाह कहीं भी लागू होती है।

डेवलपर्स प्रोग्राम की स्थिति बदलने के लिए IEnumerable को पुन: स्थापित करने की अपेक्षा नहीं करते हैं। यह नहीं है कि IEnumerable का उद्देश्य सभी .NET के साथ एक असंगत व्यवहार है।

एकता छद्म-कोरआउटिन के रूप में yield return का उपयोग कर रही है, और यह किसी भी देवताओं के लिए अपरिचित होने का कारण बन रहा है।

आधुनिक सी # में हमारे पास यूनिटी के इरादे को पूरा करने के लिए async/प्रतीक्षा है, लेकिन उस सुविधा से पहले एकता उपलब्ध कराई गई थी।

+1

जबकि 'उपज' के साथ कोरआउटिन बनाना बहुत आसान है, तो आप इसे 'async'/'प्रतीक्षा के साथ कैसे बनाएंगे '? दिलचस्प बात यह है कि [विकी] (https://en.wikipedia.org/wiki/Coroutine#Implementations_for_C.23) अर्द्ध-कोरआउट पैटर्न के रूप में 'उपज' पैटर्न को सूचीबद्ध करता है, लेकिन 'async' /' await' सूचीबद्ध नहीं करता है। – xanatos

+0

कोरी, जबकि सभी सत्य ध्यान में रखते हैं हालांकि एकता ईसीएस फ्रेम-आधारित प्रणाली है; वे पूरी चीज को थोड़ा सा मतलब "घुमा रहे हैं", "अगले फ्रेम पर जाएं" से ज्यादा कुछ नहीं। (मुझे कोई संकेत नहीं है कि यह क्यों मौजूद है, क्योंकि अपडेट समान है ... यानी अगले फ्रेम तक पहुंचें; सुनिश्चित करें, यह सुविधाजनक है लेकिन इसके लायक अराजकता है?) आप निश्चित रूप से अविश्वसनीय रूप से सही हैं कि 99% लोग "कोरआउट्स" सोचते हैं! एकता में ** थ्रेडिंग/समय/प्रतीक्षा ** के साथ कुछ करना है। बेशक, कोरआउट के पास उन मुद्दों से कोई लेना-देना नहीं है। – Fattie

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