Как остановить существующую диспетчерскую очередь и начать новую? - PullRequest
0 голосов
/ 04 октября 2018
    @objc func textFieldChanged(_ textField: UITextField) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
            self.shouldEnableBtn()
        })
}

Здесь, если я снова введу textFieldChanged, я хочу отменить существующую диспетчеризацию и начать новую.

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете использовать DispatchWorkItem класс, который позволяет вам отменить вашу задачу индивидуально.

    let workItem = DispatchWorkItem {
        self.shouldEnableBtn()
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: workItem)

    // To cancel the work-item task
    workItem.cancel()

Лучше использовать OperationQueue для этой задачи следующим образом:

    let operationQueue = OperationQueue()
    operationQueue.maxConcurrentOperationCount = 1

    // Add operation in the queue
    operationQueue.addOperation {
        self.shouldEnableBtn()
    }

    // Cancel to on-going operation by
    operationQueue.cancelAllOperations()

    // Pause to on-going operation by
    operationQueue.isSuspended = true
...