private void TransferOwnershipTo(IReadOnlyList <FileDTO> googleFiles, IGoogleService newOwnerGoogleService, Action <FileDTO> callback) { var newOwner = newOwnerGoogleService.GetUserInfo(); var commandsDto = googleFiles .Select(file => { var command = _driveService.Permissions.Create(new Google.Apis.Drive.v3.Data.Permission { Role = "owner", Type = "user", EmailAddress = newOwner.EmailAddress }, file.Id); command.TransferOwnership = true; command.EmailMessage = "Автоматический перенос."; return(new { command, file }); }) .ToArray(); _logger.LogMessage("Запускаем функцию переноса гугл-документов в пакетном режиме."); WrapBatchOperation(commandsDto, commandDto => commandDto.command, (index) => callback(googleFiles[index])); // removing edit permissions _logger.LogMessage("Останавливаем поток на 2 секунды, чтобы все данные сохранились в сервисах Google Drive"); Thread.Sleep(2000); newOwnerGoogleService.DeleteOwnershipPermission(googleFiles); // correct dirs chain _logger.LogMessage("Останавливаем поток на 2 секунды, чтобы все данные сохранились в сервисах Google Drive"); Thread.Sleep(2000); newOwnerGoogleService.RecoverParents(googleFiles); }