internal bool UploadFile(string name, string mimeType, string parentId, Stream fileStream, IProgress <long> progress, Func <int, bool> shouldAbort) { var fileMetadata = new File { Name = name, MimeType = mimeType, Parents = new List <string> { parentId } }; FilesResource.CreateMediaUpload request = _driveService.Files.Create(fileMetadata, fileStream, fileMetadata.MimeType); request.Fields = "id"; if (progress != null) { request.ProgressChanged += u => progress.Report(u.BytesSent); } IUploadProgress uploadProgress = request.Upload(); int currentTry = 0; while (uploadProgress.Status != UploadStatus.Completed) { if (!shouldAbort(currentTry)) { return(false); } ++currentTry; request.Resume(); } return(true); }