У меня есть 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
после того, как кто-то закончил, но я снова чувствую, что должно быть что-то более простое и прямое.
Спасибо!