如何从异步 Lambda 表达式(未包装为任务)返回真实类型?

Moh*_*din 1 .net c# asp.net .net-core asp.net-core

在我的代码postsVM中,类型为IEnumerable<Task<PostViewModel>>.
我怎样才能返回IEnumerable<PostViewModel>(没有Task)呢?

var postsVM = posts.Select(async p => new PostViewModel
{
    PostId = p.Id,
    PostContent = p.Content,
    PostTitle = p.Title,
    WriterAvatarUri = fileService.GetFileUri(p.Writer.Profile.AvatarId, Url),
    WriterFullName = p.Writer.Profile.FullName,
    WriterId = p.WriterId,
    Liked = await postService.IsPostLikedByUserAsync(p.Id, userId),
    LikesCount = await postService.GetPostLikesCountAsync(p.Id)
});
Run Code Online (Sandbox Code Playgroud)

Jon*_*nna 5

IEnumerable<PostViewModel> results = await Task.WhenAll(postsVM);
Run Code Online (Sandbox Code Playgroud)

更准确地说,当所有传递给它的任务都完成时,Task.WhenAll(postVM)将返回一个Task<PostViewModel[]>完成的,所以等待然后PostViewModel[]你会得到一个你可以使用的类型,或者IEnumerable<PostViewModel>作为西装。