Быстрое закрытие на цепях? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть TaskExecutor и несколько Task с:

class TaskExecutor {
    func execute(_ task: Task, completion: ()->()) {
        // do something async here
        completion()
    }
}

class Task {
    // code for task
}

Теперь мне нужно выполнять задачи одну за другой - то есть вторая задача запускается только после завершения первой задачи, я знаю, что могу иметь изменяемый массив для задач и продолжать брать первую (т.е. следующую) из массив и выполнить его в закрытии завершения TaskExecutor, но есть ли разумный способ сделать это?

Я также думал о чем-то вроде Chainable протокола:

protocol Chainable<T> {
    var next: T?
}

И сделайте Task соответствующим этому, затем свяжите все задачи как связанный список, выполните next после того, как кто-то закончил, но я снова чувствую, что должно быть что-то более простое и прямое.

Спасибо!

...