2013-05-18 26 views
5

Giả sử tôi gọi dispatch_async() ba lần theo thứ tự:Hàng đợi Grand Central Dispatch chính có nối tiếp hay đồng thời không?

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doOne]; 
}); 

// some code here 

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doTwo]; 
}); 

// more code here 

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doThree]; 
}); 

Liệu điều này luôn luôn được thực hiện như

[self doOne], [self doTwo], sau đó [self doThree], hoặc là thứ tự được đảm bảo?

Trong trường hợp này, câu hỏi có thể là nếu hàng đợi chính là nối tiếp hoặc đồng thời.

Trả lời

13

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

dispatch_get_main_queue

Trả về văn đợi serial gắn liền với chủ đề chính của ứng dụng.

nên hàng đợi chính là một serial hàng đợi, và [self doOne], [self doTwo], [self doThree] được thực hiện tuần tự theo thứ tự đó.

+2

Ngoài ra, nó phải nối tiếp vì các khối chạy trên cùng một chuỗi. Không có cách nào mà một sợi đơn có thể chạy nhiều khối đồng thời. – Sven

+1

@Rob Có, nhưng các khối được gửi đến hàng đợi chính sẽ được thực hiện trong chuỗi chính. Đó là toàn bộ điểm của hàng đợi chính. Hàng đợi không thực thi các khối, luôn xảy ra trong một số chuỗi. Thông thường, một chuỗi riêng được quản lý bởi GCD, nhưng luồng chính cho hàng đợi chính. – Sven

+0

@Sven Bạn hiểu nhầm tôi. Quan điểm của tôi đơn giản là làm rõ rằng điều này đúng với hàng đợi chính, không áp dụng cho hàng đợi nói chung. – Rob

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