class LastOperation : AsyncOperation { ..... init() { super.init() ... } override func cancel() { task.cancel() super.cancel() } override func main() { guard !isCancelled else { return } guard let dependencyID = dependencies .compactMap({ ($0 as? FirstOperation)?.xxxx }).first else { return } task = session.dataTask(...) task.resume() } }