Cú pháp đơn giản là:
// to run something in 0.1 seconds
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
    // your code here
}
Lưu ý, cú pháp trên secondsnhư thêm vào Doubledường như là một nguồn gây nhầm lẫn (đặc biệt vì chúng ta đã quen với việc thêm nsec). DoubleCú pháp "thêm giây là " hoạt động vì deadlinelà một DispatchTimevà, đằng sau hậu trường, có một +toán tử sẽ mất một Doublevà thêm nhiều giây đó vào DispatchTime:
public func +(time: DispatchTime, seconds: Double) -> DispatchTime
Nhưng, nếu bạn thực sự muốn thêm một số nguyên msec, μs hoặc nsec vào DispatchTime, bạn cũng có thể thêm a DispatchTimeIntervalvào a DispatchTime. Điều đó có nghĩa là bạn có thể làm:
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
    os_log("500 msec seconds later")
}
DispatchQueue.main.asyncAfter(deadline: .now() + .microseconds(1_000_000)) {
    os_log("1m μs seconds later")
}
DispatchQueue.main.asyncAfter(deadline: .now() + .nanoseconds(1_500_000_000)) {
    os_log("1.5b nsec seconds later")
}
Tất cả đều hoạt động trơn tru vì phương thức quá tải riêng biệt này cho +toán tử trong DispatchTimelớp.
public func +(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTime
Nó được hỏi làm thế nào một người đi về việc hủy bỏ một nhiệm vụ được gửi đi. Để làm điều này, sử dụng DispatchWorkItem. Ví dụ: điều này bắt đầu một tác vụ sẽ kích hoạt trong năm giây hoặc nếu bộ điều khiển chế độ xem bị loại bỏ và giải phóng, nó deinitsẽ hủy tác vụ:
class ViewController: UIViewController {
    private var item: DispatchWorkItem?
    override func viewDidLoad() {
        super.viewDidLoad()
        item = DispatchWorkItem { [weak self] in
            self?.doSomething()
            self?.item = nil
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: item!)
    }
    deinit {
        item?.cancel()
    }
    func doSomething() { ... }
}
Lưu ý việc sử dụng [weak self]danh sách chụp trong DispatchWorkItem. Điều này là cần thiết để tránh một chu kỳ tham chiếu mạnh mẽ. Cũng lưu ý rằng điều này không thực hiện hủy bỏ ưu tiên, mà chỉ dừng nhiệm vụ bắt đầu nếu nó chưa được thực hiện. Nhưng nếu nó đã bắt đầu vào thời điểm nó gặp cancel()cuộc gọi, khối sẽ hoàn thành việc thực hiện (trừ khi bạn kiểm tra thủ công isCancelledbên trong khối).