2010-07-31 18 views
11

Bir asenkron görev şöyle var:Bir dispatch_async görevi tamamlandığında nasıl bilgilendirilirim?

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

arka plan görevi tamamlandığında haberdar olmak için bir yolu var mı?

Veya tamamlandıktan sonra bir yöntemi çağırmak için?

Belgeleri okudum ve dispatch_after'ı inceledim, ancak belirli bir süre sonra yöntemi göndermek için daha fazla tasarlanmış görünüyor.

Yardımlarınız için teşekkürler. Dokümanlar

cevap

15

:

BİTİŞ geri aramalar

Tamamlama geri aramaları dispatch_async için iç içe çağrılar() işlevi aracılığıyla gerçekleştirilebilir. Hedef sırasını dispatch_async() öğesine yapılan ilk çağrıdan önce saklamayı ve tamamlanma geri çağrısı beklemede iken hedef sıranın ayrılmamış olduğundan emin olmak için tamamlanma geri çağırma işleminin sonunda bu sırayı serbest bırakmayı hatırlamanız önemlidir . Örneğin:

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

hi .. ben bir şüphe .. dokümanlarına göre: hemen döner ve daha sonra blok arka eşzamansız olarak çalıştırılır dispatch_async. Şüphem .. iç dispatch_async çağrısından sonra dispatch_release kullandığımız için, iç bloğu çalıştırmadan önce destination_queue serbest bırakmayacak mı? – Devarshi

+0

muhtemelen, çok gibi dispatch_async geri arama içinde salınmasını içerir daha iyi olabilir: ({; dispatch_release (destination_queue); reply_block (r, err)} destination_queue, ^) dispatch_async; – ACBurk

+0

Kuyruğun yaratılmasında değil, sıranın oluşturulmasında olacağına inanıyorum. –

İlgili konular