2013-07-22 6 views
8

क्या एफ # में Scala's Promise जैसा कुछ है?क्या कोई एफ # स्कैला के वादे के बराबर है?

वायदा केवल पढ़ने के लिए प्लेसहोल्डर वस्तु जिसके परिणामस्वरूप अभी मौजूद नहीं है के लिए बनाया का एक प्रकार के रूप में परिभाषित कर रहे हैं, एक वादा सोचा जा सकता है की राईट योग्य, एकल काम कंटेनर है, जो एक पूर्ण कर देती है भविष्य। यही है, सफलता का उपयोग विधि सफलतापूर्वक विधि का उपयोग करके भविष्य के मूल्य (सफलतापूर्वक "पूरा करने" द्वारा) को पूरा करने के लिए किया जा सकता है। इसके विपरीत, विफलता विधि का उपयोग करके, वचन को विफल करने के द्वारा भविष्य में को अपवाद के साथ पूरा करने के लिए भी एक वादा का उपयोग किया जा सकता है।

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

उत्तर

12

एक वचन का नेट समकक्ष TaskCompletionSource है, तो आप उनका उपयोग कर सकते हैं एफ # से। आप Async.AwaitTask का उपयोग कर Task<T> से Async<T> बना सकते हैं उदा।

let tcs = new TaskCompletionSource<int>() 
let ta: Async<int> = Async.AwaitTask tcs.Task 

//complete completion source using `SetResult`\`SetException` etc. 
संबंधित मुद्दे