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.
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
@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
@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