public List <string> Invoke(string parentId, List <string> fileIds) { try { using (DriveService driveService = DriveService.Create()) { FileInfo parent = driveService.GetFile(parentId); if (parent == null) { throw new Exception("Parent no longer exists."); } var moveStreams = new List <DriveProxy.API.DriveService.MoveStream>(); foreach (string fileId in fileIds) { FileInfo fileInfo = driveService.GetFile(fileId); if (fileInfo == null) { throw new Exception("File no longer exists."); } var moveStream = new DriveProxy.API.DriveService.MoveStream(); moveStream.Init(parent.Id, fileInfo); moveStreams.Add(moveStream); } driveService.MoveFiles(moveStreams); while (true) { bool finished = true; for (int i = 0; i < moveStreams.Count; i++) { DriveProxy.API.DriveService.MoveStream moveStream = moveStreams[i]; if (!moveStream.Finished) { finished = false; break; } } if (finished) { break; } System.Threading.Thread.Sleep(250); } var movedFileIds = new List <string>(); foreach (DriveService.MoveStream moveStream in moveStreams) { if (moveStream.Completed) { movedFileIds.Add(moveStream.FileId); } else if (moveStream.Cancelled) { } else if (moveStream.Failed) { throw new LogException("Move could not complete - " + moveStream.ExceptionMessage, true, true); } } return(movedFileIds); } } catch (Exception exception) { Log.Error(exception); return(null); } }