#c# #.net-core #async-await #azure-storage
#c# #.net-ядро #асинхронное ожидание #azure-хранилище
Вопрос:
Я создаю метод для возврата всех имен файлов из общего файлового ресурса Azure, но также включаю сканирование всех вложенных папок. Однако мой асинхронный метод неожиданно был отключен без какой-либо причины.
Метод получил корневую папку (каталог), эта корневая папка имеет несколько вложенных папок.
Однако после этой строки :
// return pageable list of directories and files. AsyncPageablelt;ShareFileItemgt; PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(directory);
Метод неожиданно вышел из строки foreach, так как каталоги страниц были пусты, но в нем есть несколько файлов.
Моя клиентская переменная каталога не имеет значения null и указывает на нужную папку «unistad» в общей папке «unistad-файлы».:
Смотрите ниже мой код
/// lt;summarygt; /// Returns all directories and files from the root folder. /// lt;/summarygt; /// lt;param name="directory"gt;Root folderlt;/paramgt; /// lt;param name="returnDirectories"gt;True return also directories, False return files only.lt;/paramgt; /// lt;returnsgt;List of directories and files.lt;/returnsgt; public async Tasklt;Listlt;FileResponseItemgt;gt; GetDirectoriesAndFiles(string directory, bool returnDirectories) { // Get a reference to the directory ShareDirectoryClient directoryClient = _shareClient.GetDirectoryClient(directory); // Check the client exists if (directoryClient != null) { // return pageable list of directories and files. AsyncPageablelt;ShareFileItemgt; PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(directory); Listlt;FileResponseItemgt; files = new Listlt;FileResponseItemgt;(); //IAsyncEnumeratorlt;ShareFileItemgt; enumerator = PageableDirectories.GetAsyncEnumerator(); await foreach(ShareFileItem file in PageableDirectories) { if (file.IsDirectory) { // If flagged to return the directories. Add the directory information to the list. if (returnDirectories) { // Add the folder to the list to be returned. files.Add(new FileResponseItem(file, "")); } // Recursively add the files within the sub folders. string subFolder = Path.Combine(directory, file.Name); Listlt;FileResponseItemgt; subFolderFiles = await GetDirectoriesAndFiles(subFolder, false); // Add the files found in the sub folder. foreach(FileResponseItem subFolderFile in subFolderFiles) files.Add(subFolderFile); } else // Add the file to the list to be returned. files.Add(new FileResponseItem(file,directory)); } return files; } else { return null; } } }
См. Ниже инструкции, приведенные на веб-сайте корпорации Майкрософт:
async Task IterateSecretsWithAwaitForeachAsync() { AsyncPageablelt;SecretPropertiesgt; allSecrets = client.GetPropertiesOfSecretsAsync(); await foreach (SecretProperties secret in allSecrets) { Console.WriteLine($"IterateSecretsWithAwaitForeachAsync: {secret.Name}"); } }
Комментарии:
1. И на что
directory
он настроен?2. Каков тип приложения? Это консольное приложение?
3. Ян, ты прав, на каталог ссылались дважды, спасибо, что помог мне в этом. Первое верно, второе было ошибкой, в методе «GetFilesAndDirectoriesAsync» на самом деле не требуется, потому что есть фильтр.
Ответ №1:
Я обнаружил свою ошибку. Я дважды ссылался на каталог переменных.
В этой строке я допустил ошибку, чтобы исправить ее, я заменил каталог на «» AsyncPageable PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(«»);