.Net Core Aync Метод, вызывающий неожиданный выход потока с кодом 0

#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(«»);