Asyn c диспетчерская задача не может быть возобновлена ​​после отмены - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть асинхронная задача c, которую я хотел бы запустить через 10 секунд после нажатия кнопки, и при нажатии другой кнопки я хотел бы отменить эту задачу.

При первом снимке задачи запускается, как и ожидалось, через 10 секунд, но если я нажму кнопку отмены и попытаюсь запланировать выполнение задачи через 10 секунд, то это не будет работать.

var myTask = DispatchWorkItem {}

override func viewDidLoad() {
    super.viewDidLoad()

    myTask = DispatchWorkItem
    {
        NSLog("TASK_TRIGGERED")
    }
}

@IBAction func buttonStart_Touch(_sender: Any) {
    if (myTask.isCancelled) {
        //Reschedule task
        myTask.perform()
        DispatchQueue.main.asyncAfter(deadline: .now() + 10, execute: myTask)
    }
    else {
        //Schedule task
        DispatchQueue.main.asyncAfter(deadline: .now() + 10, execute: myTask)
    }
}

@IBAction func buttonCancel_Touch(_sender: Any) {
    //Stop task
    myTask.cancel()
}
...