【问题标题】:.Net Core Aync Method causing unexpectedly Thread Exiting with code 0.Net Core Async 方法导致意外线程退出,代码为 0
【发布时间】:2022-01-15 03:19:06
【问题描述】:

我正在创建一种从 Azure 文件共享返回所有文件名的方法,但也包括扫描所有子文件夹。但是我的异步方法意外退出,没有任何理由。

方法接收到根文件夹(目录),这个根文件夹有几个子文件夹。

但是在这一行之后:

                // return pageable list of directories and files.
                AsyncPageable<ShareFileItem> PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(directory);

该方法意外退出 foreach 行,因为 PageableDirectories 为空,但它有多个文件。

我的目录客户端变量不为空,并且指向“unistad-files”共享中的正确文件夹“unistad”:

见下面我的代码

       /// <summary>
        /// Returns all directories and files from the root folder.
        /// </summary>
        /// <param name="directory">Root folder</param>
        /// <param name="returnDirectories">True return also directories, False return files only.</param>
        /// <returns>List of directories and files.</returns>
        public async Task<List<FileResponseItem>> 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.
                AsyncPageable<ShareFileItem> PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync(directory);

                List<FileResponseItem> files = new List<FileResponseItem>();

                //IAsyncEnumerator<ShareFileItem> 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);
                        List<FileResponseItem> 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;
            }

        }

    }

请参阅以下 Microsoft 网站中的说明:

async Task IterateSecretsWithAwaitForeachAsync()
{
    AsyncPageable<SecretProperties> allSecrets = client.GetPropertiesOfSecretsAsync();

    await foreach (SecretProperties secret in allSecrets)
    {
        Console.WriteLine($"IterateSecretsWithAwaitForeachAsync: {secret.Name}");
    }
}

【问题讨论】:

  • directory 设置为什么?
  • 应用程序的类型是什么?是控制台应用吗?
  • Ian,你是对的,该目录被引用了两次,感谢您在这方面帮助我。第一个是正确的,第二个是错误的,在方法中“GetFilesAndDirectoriesAsync”实际上是不需要的,因为是一个过滤器。

标签: c# .net-core async-await azure-storage


【解决方案1】:

我发现了我的错误。我两次引用了变量目录。

这一行我做错了,为了修复它,我用“”替换了目录 AsyncPageable PageableDirectories = directoryClient.GetFilesAndDirectoriesAsync("");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2013-08-17
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多