Как я могу получить уведомление о завершении задачи dispatch_async? - PullRequest
11 голосов
/ 31 июля 2010

У меня есть асинхронная задача, например:

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

Есть ли способ получить уведомление о завершении фоновой задачи?

Или вызвать метод по завершении?

Я прочитал документацию и изучил dispatch_after, но, похоже, он больше предназначен для отправки метода через определенный промежуток времени.

Спасибо за помощь.

1 Ответ

15 голосов
/ 31 июля 2010

Из документов:

ВЫЗОВЫ ЗАВЕРШЕНИЯ

Обратные вызовы завершения могут быть выполнены посредством вложенных вызовов функции 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);
         });
 }

Источник

...