c# - ForEach() 给出“在前一个操作完成之前在此上下文上启动的第二个操作”。foreach 循环不
问题描述
我有以下模型和声明:
var bm = new UserProfileUpdateModel
{
LastName = "new",
FirstName = "name",
};
List<Claim> claims = new List<Claim>
{
new Claim("family_name", bm.LastName),
new Claim("given_name", bm.FirstName),
};
在 .NET Core 3.1 应用程序中,我将首先删除所有匹配的声明 using _userManager.RemoveClaimsAsync()
,然后在claims
using中添加新的相应声明_userManager.AddClaimAsync()
。
问题:
当我尝试将项目循环claims
并执行删除/添加时,它可以工作。
foreach(var c in claims)
{
// principal is a ClaimsPrincipal
var list = principal.Claims.Where(currC => currC.Type == c.Type).ToList();
var removeResult = await _userManager.RemoveClaimsAsync(user, list);
if(removeResult.Succeeded)
{
var addResult = await _userManager.AddClaimAsync(user, c);
}
}
但是,当我切换到使用时ForEach()
,
claims.ForEach(async c =>
{
// principal is a ClaimsPrincipal
var list = principal.Claims.Where(currC => currC.Type == c.Type).ToList();
var removeResult = await _userManager.RemoveClaimsAsync(user, list);
if(removeResult.Succeeded)
{
var addResult = await _userManager.AddClaimAsync(user, c);
}
});
该应用程序将抛出一个异常告诉我A second operation started on this context before a previous operation completed
。
所以问题是,当我调用foreach()
and时发生了什么ForEach()
?为什么只会ForEach()
导致异常?
解决方案
推荐阅读
- java - 使用 FlatFileItemReader 读取元素列表
- python - python:object()不带参数错误
- python - 布尔切片交换 numpy 数组的维度
- javascript - 将 nodetext 附加到 svg 元素
- spring - Spring Boot 页面刷新有一些 404 请求
- android - 在 BottomNavigationView 中禁用 tooltipText
- ruby-on-rails - 使用 ActiveRecord 在哪里找不到记录时如何失败?
- android - 无法在 Google Play 管理中心开启定时发布模式
- sql - Oracle 内联视图列别名仅在加入表之前有效,而在加入表时无效
- php - 回调函数中php打开和关闭标签的奇怪用法