class FirstOperation : AsyncOperation { init(.. ) { super.init() .... } override func cancel() { task.cancel() super.cancel() } override func main() { guard !isCancelled else { return } task = session.dataTask(with: request) task.resume() } }