我在await
循环中遇到foreach
的问题:
foreach (var role in data.Roles)
{
var selectedRole = await roleRepo.GetRole(role.Code);
}
public async Task<Role> GetRole(string roleCode)
{
var role = await _dbContext.Set<Role>().FindAsync(id);
return role;
}
正如我脑子里的代码所说,它应该按照以下顺序工作:
GetRole
完成但是在运行时它是这样的:
A second operation started on this context before a previous asynchronous...
我现在正在使用EF和webapi2。有人可以解释是什么导致了这个吗?
更新
感谢您的回复,我很抱歉,因为这是我的第一个问题,我不会遵循最小,完整和可验证的示例。
虽然发现了问题的主要来源,但在此之前我还没有意识到这种方法尚未实现。 对不起你们的麻烦,谢谢你的帮助!
答案 0 :(得分:0)
如果Jon Skeet不确定的话,我不愿发布这个...但对我来说,看起来它正在按照你的要求行事。你已经为var selectedRole指定了await ......但你真的想让它同步运行吗?
如果你尝试会发生什么:
foreach (var role in data.Roles)
{
var selectedRole = roleRepo.GetRole(role.Code).Result;
}
这应该强制你的循环等到第一次迭代完成。这将帮助您找出我认为的问题。看看你的DbContext内容会很好......