2010-07-31 9 views
11

मैं एक अतुल्यकालिक कार्य इतना की तरह है:जब प्रेषण_एसिंक कार्य पूरा हो जाता है तो मुझे कैसे सूचित किया जा सकता है?

dispatch_async(dispatch_get_main_queue(), ^{ 
    myAsyncMethodsHere; 
}); 

वहाँ एक रास्ता सूचना भेजता है जब पृष्ठभूमि कार्य पूरा हो गया है है?

या पूरा होने पर एक विधि को कॉल करने के लिए?

मैंने प्रलेखन के माध्यम से पढ़ा है और प्रेषण के बाद देखा है, लेकिन ऐसा लगता है कि यह एक निश्चित अवधि के बाद विधि को प्रेषित करने के लिए और अधिक डिज़ाइन किया गया है।

सहायता के लिए धन्यवाद।

उत्तर

15

डॉक्स से:

पूरा कॉलबैक

समापन कॉलबैक dispatch_async को नेस्टेड कॉल() फ़ंक्शन के माध्यम से पूरा किया जा सकता। यह को dispatch_async() पर पहली कॉल से पहले गंतव्य कतार को बनाए रखने के लिए याद रखना महत्वपूर्ण है, और समापन कॉलबैक लंबित होने पर गंतव्य कतार को समाप्त नहीं किया गया है, यह सुनिश्चित करने के लिए पूरा कतार कॉलबैक के अंत में उस कतार को रिलीज़ करने के लिए महत्वपूर्ण है। उदाहरण के लिए:

void 
async_read(object_t obj, 
     void *where, size_t bytes, 
     dispatch_queue_t destination_queue, 
     void (^reply_block)(ssize_t r, int err)) 
{ 
     // There are better ways of doing async I/O. 
     // This is just an example of nested blocks. 

     dispatch_retain(destination_queue); 

     dispatch_async(obj->queue, ^{ 
       ssize_t r = read(obj->fd, where, bytes); 
       int err = errno; 

       dispatch_async(destination_queue, ^{ 
         reply_block(r, err); 
       }); 
       dispatch_release(destination_queue); 
     }); 
} 

Source

+0

हाय .. मेरे पास एक संदेह .. दस्तावेजों के अनुसार: dispatch_async तुरंत वापस लौट, और फिर ब्लॉक पृष्ठभूमि में एसिंक्रोनस रूप से निष्पादित। मेरा संदेह है .. चूंकि हम आंतरिक प्रेषण_सिनक के कॉल के बाद dispatch_release का उपयोग कर रहे हैं, क्या यह उस पर आंतरिक ब्लॉक निष्पादित करने से पहले गंतव्य_क्यू जारी नहीं करेगा? – Devarshi

+0

संभवतः, dispatch_async कॉलबैक के अंदर रिलीज को शामिल करना बेहतर हो सकता है: dispatch_async (destination_queue,^{ answer_block (r, err); dispatch_release (destination_queue);}); – ACBurk

+0

मेरा मानना ​​है कि कतार ब्लॉक के निर्माण पर बनाए रखा जाएगा, जब इसे निष्पादित नहीं किया जाता है। –

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

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