2010-07-31 28 views
11

Tôi có một nhiệm vụ không đồng bộ như vậy:Làm cách nào để tôi có thể được thông báo khi công việc dispatch_async hoàn tất?

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

Có cách nào để được thông báo khi nhiệm vụ nền hoàn tất?

Hoặc gọi phương thức khi hoàn thành?

Tôi đã đọc qua tài liệu và đã xem xét dispatch_after, nhưng dường như nó được thiết kế để gửi phương thức sau một khoảng thời gian nhất định.

Cảm ơn sự giúp đỡ.

Trả lời

15

Từ các tài liệu:

HOÀN callbacks

callbacks Hoàn thể được thực hiện qua các cuộc gọi lồng nhau đến dispatch_async() chức năng. Đó là quan trọng cần nhớ giữ lại hàng đợi đích trước cuộc gọi đầu tiên để dispatch_async() và để giải phóng hàng đợi đó ở cuối cuộc gọi lại hoàn thành để đảm bảo hàng đợi đích không được deallocated trong khi chờ hoàn thành. Ví dụ:

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 .. Tôi có một nghi ngờ .. theo các tài liệu: dispatch_async trả về ngay lập tức, và sau đó là khối thực hiện không đồng bộ ở chế độ nền. Nghi ngờ của tôi là .. kể từ khi chúng tôi đang sử dụng dispatch_release sau khi cuộc gọi của dispatch_async bên trong, là nó sẽ không phát hành các destination_queue trước khi thực hiện các khối bên trong trên nó? – Devarshi

+0

có thể, tốt hơn nên đưa vào bên trong cuộc gọi dispatch_async như sau: dispatch_async (destination_queue,^{ reply_block (r, err); dispatch_release (destination_queue);}); – ACBurk

+0

Tôi tin rằng hàng đợi sẽ được giữ lại khi tạo khối, chứ không phải khi nó được thực thi. –

Các vấn đề liên quan