पहले, NSOperationQueue
आप संचालन enqueue करते हैं, कि, एक start
विधि, एक cancel
विधि और कुछ नमूदार गुणों के साथ अतुल्यकालिक संचालन में किसी प्रकार का है, एक प्रेषण कतार के साथ एक एक ब्लॉक सबमिट कर सकते हैं या एक बंद या एक फ़ंक्शन एक प्रेषण कतार में, जिसे तब निष्पादित किया जाएगा।
एक "ऑपरेशन" मूल रूप से एक ब्लॉक (या बंद, कार्य) से मौलिक रूप से अलग है। एक ऑपरेशन में अंतर्निहित असीमित कार्य होता है, जबकि एक ब्लॉक (बंद या कार्य) बस यही होता है।
क्या एक NSOperation
के पास आता है, हालांकि, एक अतुल्यकालिक समारोह, जैसे:
func asyncTask(param: Param, completion: (T?, Error?) ->())
अब
वायदा साथ
हम जैसे ही अतुल्यकालिक समारोह को परिभाषित कर सकते हैं:
func asyncTask(param: Param) -> Future<T>
जो इस तरह के असीमित कार्यों को काफी आसान बनाता है।
के बाद से वायदा map
और flatMap
और इतने पर की तरह Combinator कार्यों है, हम काफी आसानी से "अनुकरण" कर सकते हैं NSOperation
की "निर्भरता" सुविधा, बस एक और अधिक शक्तिशाली और अधिक संक्षिप्त और अधिक सुबोध तरीके से।
हम भी कोड की कुछ लाइनें GCD पर आधारित के साथ NSOperationQueue
किसी प्रकार लागू कर सकते हैं, का कहना है कि एक "कार्यपंक्ति" और मूल रूप से एक ही सुविधाओं के साथ, "maxConcurrentTasks" की तरह हैं और इसका उपयोग कार्य कार्यों enqueue कर सकते हैं (संचालन नहीं), बस एक और अधिक शक्तिशाली, अधिक संक्षिप्त और एक और समझदार तरीके से भी। ;)
रद्द करने योग्य ऑपरेशन प्राप्त करने के लिए, आपको NSOperation
का उप-वर्ग बनाना होगा - जबकि आप एसिंक फ़ंक्शन "विज्ञापन-होड" - इनलाइन बना सकते हैं।
इसके अतिरिक्त, क्योंकि रद्द एक स्वतंत्र अवधारणा है, हम यह मान सकते हैं, कुछ पुस्तकालय जिसका कार्यान्वयन केवल GCD पर आधारित है, Uhm, हमेशा की तरह इस समस्या का हल मौजूद है;) यह इस तरह लग सकता है :
self.cancellationRequest = CancellationRequest()
self.asyncTask(param: param, cancellationToken: cr.token).map { result in
...
}
और बाद में:
override func viewWillDisappear(_ animated: animated) {
super.viewWillDisappear(animated)
self.cancellationRequest.cancel()
}
तो, IMHO वहाँ वास्तव में उपयोग करने के लिए कोई कारण नहीं है भद्दा NSOperation
और NSOperationQueue
, और कोई कारण नहीं उपवर्गीकरण के लिए किसी भी अधिक है NSOperation
, जो कि काफी विस्तृत और आश्चर्यजनक मुश्किल है, जब तक कि आपको डेटा दौड़ की परवाह नहीं है।