2012-01-24 11 views
5

.NET 4 के साथ टीपीएल का उपयोग करके, मैं यह तय करने की कोशिश कर रहा हूं कि वायदा से निपटने वाले एपीआई कैसे डिजाइन करें। एक संभावना यह है कि लेकिन हुआ करने के लिए मुझे async पैटर्न की नकल करने की थी एक End(IAsyncResult) विधि के बिना:क्या यह टीपीएल मुहावरे मौजूद है?

public Task<int> BeginGetAge() 
{ 
    // create and return task 
} 

public int GetAge() 
{ 
    return this.BeginGetAge().Result; 
} 

जैसे, कॉल तय कर सकते हैं अवरुद्ध या GetAge() के गैर अवरुद्ध संस्करण कॉल करने के लिए। इसके अलावा, उनके पास भविष्य तक पहुंच है, इसलिए इसके शीर्ष पर निरंतरताएं बना सकते हैं।

क्या यह मूर्खता वैध है? क्या कोई स्पष्ट कमी या समस्याएं हैं जो मुझे याद आ रही हैं? क्या इसका शायद आधिकारिक नाम भी है?

+0

आपका दूसरा मामला मुझे 'प्रतीक्षा' से काफी लाभ होगा। – user7116

+0

एफवाईआई, स्टीफन टब ने इस बारे में पोस्ट किया है (एसिंक तरीकों के लिए सिंक रैपर की पेशकश) - टीएल; डॉ इसे टालना :) http://blogs.msdn.com/b/pfxteam/archive/2012/04/13/10293638 देखें। एएसपीएक्स और http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx –

उत्तर

3

Task लौटने वाला नया सी # 5 async तरीका है - इसे टीएपी कहा जाता है: Task-based Asynchronous Pattern

केवल अंतर यह है कि विधि का नाम GetAgeAsync है।

तो, हाँ - इस दृष्टिकोण की अनुशंसा की जाती है क्योंकि इसे जारी होने पर सी # 5 एसिंक को पोर्ट करना आसान हो जाएगा।

+0

बहुत उपयोगी संदर्भ - धन्यवाद। –

2

यह मुहावरे मेरे लिए पूरी तरह से मान्य लगता है और वास्तव में Task के आधार पर समर्थन के रूप में एसिंक्रॉनी नेट के आगामी संस्करणों में एक बड़ी सुविधा होगी।

हालांकि, मैं आपके कार्यान्वयन को बदल दूंगा ताकि अवरुद्ध विधि GetAge एसिंक विधि को कॉल न करे और उसके बाद प्रतीक्षा करें - ओवरहेड (संभावित रूप से) एक नया धागा बनाने में अनावश्यक है।

+0

कोई विधियों के बीच संबंधों को स्वैप कर सकता है और 'BeginGetAge() 'वापसी' कार्य है। फैक्टरी। स्टार्टन्यू (() => GetAge())'। –

+0

@ सेनयू सटीक रूप से। –

+1

ठीक है, मुझे नहीं लगता कि यह एक नए थ्रेड को एक मौजूदा थ्रेड पर स्विच संदर्भ के रूप में इतना बना देगा। और फिर भी, यह तय करने के लिए शेड्यूलर पर निर्भर है कि यह आवश्यक है या नहीं। लेकिन मैं तुम्हारा मुद्दा लेता हूं और शॉन का सुझाव समझ में आता है। –

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

  • कोई संबंधित समस्या नहीं^_^