C# 尝试将 Task<List<myObj>> 转换为 List<myObj> 时出错

Jim*_*nes -1 .net c# task async-await blazor-server-side

我在使用异步方法时遇到一些问题。我对它有点陌生,但我正在编写一些 Blazor 代码并使用 Blob 存储,并且一些调用需要异步。这是我的代码和问题。此代码需要异步,因为它从 Azure 获取 Blob 数据。(FileUpload 是我的自定义对象):

        public async Task<List<FileUpload>> GetAllFilesAsync()
        {

            // TODO: GENERATE fileupload objects here and return
            await foreach (var blobItem in _container.GetBlobsAsync())
            {
                var name = blobItem.Name;
                BlobClient blobClient = _container.GetBlobClient(name);

                FileUpload fileUploadViewModel = new FileUpload()
                {
                    FileName = blobItem.Name,
                    FileStorageUrl = blobClient.Uri.ToString(),
                    ContentType = blobItem.Properties.ContentType,
                };

                _allFiles.Add(fileUploadViewModel);

            }
            return _allFiles;
        }
Run Code Online (Sandbox Code Playgroud)

在我的 Blazor 代码(服务器)中,我有以下代码在初始化时调用服务:

        private List<FileUpload> fileUploadViewModels = new();

        protected override async Task OnInitializedAsync()
        {
            GetAllBlobsAsync();
        }


        private void GetAllBlobsAsync()
        {
            var allFiles = blobStorageService.GetAllFilesAsync();
             fileUploadViewModels =  allFiles; // This is where the error is thrown
          
        }
Run Code Online (Sandbox Code Playgroud)

错误:无法将类型“System.Threading.Tasks.Task<System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”

我一直在这里和网络上搜索,但还没有找到答案。我尝试了 Task.FromResult() 和其他方法,但没有成功。正如我所说,我对异步和等待有点陌生,所以我希望我只是错过了一些小东西。你能澄清一下我做错了什么吗?

Dav*_*vid 6

制定GetAllBlobsAsync方法async

private async Task GetAllBlobsAsync()
Run Code Online (Sandbox Code Playgroud)

所以它内部可以进行这样await的操作:

var allFiles = await blobStorageService.GetAllFilesAsync();
Run Code Online (Sandbox Code Playgroud)

然后await调用方法本身时:

await GetAllBlobsAsync();
Run Code Online (Sandbox Code Playgroud)

基本上,您错过了“一路异步”哲学中的一步,并试图在堆栈中间创建一个同步方法。如果在堆栈底部有一个async正在等待的方法,则堆栈上的所有内容也应该是async