class ChunkOperation : AsyncOperation { ... init(..) { ..... } override func cancel() { task.cancel() super.cancel() } override func main() { guard !isCancelled else { return } guard let dependencyID = dependencies .compactMap({ ($0 as? FirstOperation)?.xxx }).first else { return } task = session.uploadTask(with: ., fromFile: ..) task.resume() } }