Trong Swift 4.2 và Xcode 10.1
Chúng tôi có ba loại Hàng đợi:
1. Hàng đợi chính: Hàng đợi
chính là hàng đợi nối tiếp được tạo bởi hệ thống và được liên kết với luồng chính của ứng dụng.
2. Hàng đợi toàn cầu: Hàng đợi
toàn cầu là một hàng đợi đồng thời mà chúng ta có thể yêu cầu đối với mức độ ưu tiên của các nhiệm vụ.
3. Hàng đợi tùy chỉnh: có thể được tạo bởi người dùng. Hàng đợi đồng thời tùy chỉnh luôn được ánh xạ vào một trong các hàng đợi toàn cầu bằng cách chỉ định thuộc tính Chất lượng dịch vụ (QoS).
DispatchQueue.main//Main thread
DispatchQueue.global(qos: .userInitiated)// High Priority
DispatchQueue.global(qos: .userInteractive)//High Priority (Little Higher than userInitiated)
DispatchQueue.global(qos: .background)//Lowest Priority
DispatchQueue.global(qos: .default)//Normal Priority (after High but before Low)
DispatchQueue.global(qos: .utility)//Low Priority
DispatchQueue.global(qos: .unspecified)//Absence of Quality
Tất cả các hàng đợi này có thể được thực thi theo hai cách
1. Thực hiện đồng bộ
2. Thực thi không đồng bộ
DispatchQueue.global(qos: .background).async {
// do your job here
DispatchQueue.main.async {
// update ui here
}
}
//Perform some task and update UI immediately.
DispatchQueue.global(qos: .userInitiated).async {
// Perform task
DispatchQueue.main.async {
// Update UI
self.tableView.reloadData()
}
}
//To call or execute function after some time
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
//Here call your function
}
//If you want to do changes in UI use this
DispatchQueue.main.async(execute: {
//Update UI
self.tableView.reloadData()
})
Từ AppCoda: https://www.appcoda.com/grand-central-dispatch/
//This will print synchronously means, it will print 1-9 & 100-109
func simpleQueues() {
let queue = DispatchQueue(label: "com.appcoda.myqueue")
queue.sync {
for i in 0..<10 {
print("🔴", i)
}
}
for i in 100..<110 {
print("Ⓜ️", i)
}
}
//This will print asynchronously
func simpleQueues() {
let queue = DispatchQueue(label: "com.appcoda.myqueue")
queue.async {
for i in 0..<10 {
print("🔴", i)
}
}
for i in 100..<110 {
print("Ⓜ️", i)
}
}