Cancel URLSession.shared.dataTask

My code allows you to upload an image while it is showing the upload progress, each time I press the “Upload” button.

Every time I press it, the progress starts at 0% until it ends at 100%. The problem is if I press the “Cancel” button, it cancels the upload of the image, but when I try to upload another image, it uploads it correctly but it does not calculate the progress.

class UploadImage{
     private var task: URLSessionDataTask?
     private var progressTask: Task<AnyObject, Error>?

  public func uploadImage() {
    self.task = nil
    
    self.task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data {
            print(String(data: data, encoding: .utf8)!)
        }
        else {
            print(String(describing: error))
            return
        }
    }
    self.task?.resume()
 }

 public func cancelUpload(){
    //self.progressTask!.cancel()
    self.task?.cancel()
 }

 public func uploadAllFiles() {
    self.progressTask = Task.detached{
        var task2: URLSessionDataTask?
        while(self.state == 0){
            if(self.task != nil){
                task2 = self.task
                if(task2!.countOfBytesSent != 0){
                    //This is the progress
              
print(round((Double(100.0)/Double(task2!.countOfBytesExpectedToSend)) * Double(task2!.countOfBytesSent)*100)/100) 
                }
            }
        }
        return 0 as AnyObject
    }
    self.uploadImage()
 }
}

My view in swiftUI

private var upload
var body: some View {
 Button(action: {
    upload = Upload()
    Task.detached{
       upload.uploadAllFiles()
    }
 }) {
    Text("Upload")                   
 }

 Button(action: {
    upload.cancelUpload()
 }) {
    Text("Cancel")                   
 }
}