पर एक पूर्णता हैंडलर को कॉल करना मैंने कुछ संबंधित प्रश्न देखे हैं लेकिन कोई भी इस मामले का उत्तर देने के लिए प्रतीत नहीं होता है। मैं एक ऐसी विधि लिखना चाहता हूं जो पृष्ठभूमि में कुछ काम करेगी। मुझे मूल विधि कॉल के लिए उपयोग किए गए समान थ्रेड/कतार पर पूर्णता कॉलबैक कॉल करने के लिए इस विधि की आवश्यकता है।dispatch_async और मूल कतार
- (void)someMethod:(void (^)(BOOL result))completionHandler {
dispatch_queue_t current_queue = // ???
// some setup code here
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL ok = // some result
// do some long running processing here
dispatch_async(current_queue, ^{
completionHandler(ok);
});
});
क्या जादू जादू यहाँ की जरूरत है ताकि पूरा होने हैंडलर एक ही कतार या sameMethod
करने के लिए कॉल के रूप में धागे पर कहा जाता है? मैं मुख्य धागा मानना नहीं चाहता। और निश्चित रूप से dispatch_get_current_queue
का उपयोग नहीं किया जाना चाहिए।
आप वर्णन कर सकते आप क्या हासिल करने की कोशिश कर रहे हैं? यह आपके विशेष उद्देश्यों के लिए क्यों मायने रखता है कि यह किस धागे पर निष्पादित किया गया है? –
@ क्रिस्टोफर पिक्सले 'कुछ विधि' कुछ पृष्ठभूमि धागे में बुलाया जा सकता है। मुझे ऐसा करना है कि समापन ब्लॉक को उसी धागे पर बुलाया जाता है, न कि मुख्य धागा या कुछ अन्य मनमाने ढंग से पृष्ठभूमि धागा। – rmaddy
मैं इसे समझता हूं। सवाल यह है कि क्यों। क्या कोई तकनीकी कारण है जिसे इसे किसी विशिष्ट धागे पर बुलाया जाना चाहिए? मैं बस सोच रहा हूं कि एक अलग डिज़ाइन हो सकता है जो मदद करेगा। –