2015-05-27 11 views
18

This blog post नए कार्य एपीआई का उल्लेख करता है, जिसमें नई Task.CompletedTask .NET 4.6 में पेश की गई संपत्ति शामिल है।.NET 4.6 के कार्य का बिंदु क्या है। पूर्ण कार्य?

क्यों जोड़ा गया है? Task.FromResult(whatever) से यह बेहतर कैसे है?

+3

स्पष्ट इरादे काफी नहीं है? – svick

+0

कारण यह है कि आप स्थाई अपरिवर्तनीय कार्यों को बनाकर स्मृति को छोड़ सकते हैं जो निश्चित राज्यों में हैं। यदि आपको एक पूरा कार्य वापस करने की आवश्यकता है क्योंकि उदा। आप केवल वैकल्पिक रूप से नेट से सामान डाउनलोड करते हैं और अन्यथा एक डमी कार्य लौटाते हैं जो पूरा करने के लिए सेट है ताकि आपके कार्य पर इंतजार करने वाले कॉलर तुरंत जारी रह सकें। अब तक आपको अपना खुद का उदाहरण बनाने और इसे कैश करने या इसे TaskCompletionSource के माध्यम से हर बार बनाने की आवश्यकता है। –

+0

ब्लॉग पोस्ट पहले से ही बताता है कि क्यों 'Task.CompletedTask' जोड़ा गया है ... यह विशेष रूप से उल्लेख है" पुस्तकालय कोड है कि प्रदर्शन और परहेज आवंटन के बारे में परवाह करता है "। अब इसकी तुलना करें अपने 'कार्य। FromResult (जो कुछ भी)': क्या यह आवंटन से बचता है? नहीं, यह नहीं करता है। – hvd

उत्तर

24

Task.FromResult(whatever)Task<TResult> के लिए काम करता है, लेकिन 4.6 तक नॉनजेनेरिक कार्य के लिए कुछ भी नहीं था। आप एक डमी मूल्य के साथ FromResult इस्तेमाल कर सकते हैं और परोक्ष Task करने के लिए इसे डाली, लेकिन यह कुछ हद तक आशय obfuscates नीचे (आप वास्तव में किसी भी अतुल्यकालिक मूल्य नहीं लौटा रही हैं) और आवंटित वस्तुओं (CompletedTask कैश्ड किया जा सकता है, जबकि और सभी कॉलर्स के बीच साझा) ।

वर्तमान (4.5.2 और पुराने) कोडबेस में कस्टम स्थिर पूर्ण कार्य देखने के लिए असामान्य नहीं है, इसलिए मेरी राय में यह ढांचे में स्वयं को शामिल करना समझ में आता है।

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