![](/img/trans.png)
[英]The 'await' operator can only be used within an async lambda expression. Consider marking this lambda expression with the 'async' modifier
[英]Marking lambda expression with async keyword
我有一个名为GetParentViewModel的函数,如下所示,该函数将Parent模型类转换为ParentViewModel,以便可以将其发送到视图。
public class Parent
{
public int ParentId { get; set; }
public string ParentName { get; set; }
public IEnumerable<Child> children{ get; set; }
}
public class Child
{
public int ChildId { get; set; }
public string ChildName { get; set; }
private IEnumerable<Friend> friends { get; set; }
public IEnumerable<Hobby> hobbies { get; set; }
}
public async Task<List<Hobby> GetHobbies(int childId)
{
return await..
}
public async Task<List<Friend> GetFriends(int childId)
{
reutrn await..
}
public async Task<ParentViewModel> GetParentViewModel(Parent parentModel)
{
return new ParentViewModel()
{
ParentId = parentModel.ParentId,
ParentName = parentModel.ParentName,
children = parentModel.children.Select(item => new ChildViewModel()
{
ChildId = item.ChildId,
ChildName = item.ChildName,
hobbies = await GetHobbies(item.ChildId),
friends = await GetFriends(item.ChildId)
});
};
}
当我尝试在GetParentViewModel中调用异步函数到GetHobbies和GetFriends时,出现错误
CS4034: The ‘await’ operator can only be used within an async lambda expression. Consider marking this lambda expression with the async modifier.
我尝试了各种方法,尝试在“ Select(item => ..”)之前标记为异步,但未成功,在“ children = await parentModel”之后使用了一个await关键字,但它似乎不起作用。救命..
我通过编写一个单独的异步函数来获得子级,但没有达到上述要求。 有什么建议吗
谢谢。
更新:我建议将重构为如下所示:
public async Task<ParentViewModel> GetParentViewModel(Parent parentModel)
{
var childrens = new List<ChildViewModel>();
foreach (var item in parentModel.children)
{
var hobbies = await GetHobbies(item.ChildId);
var friends = await GetFriends(item.ChildId);
var child = new ChildViewModel
{
ChildId = item.ChildId,
ChildName = item.ChildName,
hobbies = hobbies,
friends = friends
};
childrens.Add(child);
}
return new ParentViewModel
{
ParentId = parentModel.ParentId,
ParentName = parentModel.ParentName,
children = childrens
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.