首页 > 解决方案 > 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(),然后在claimsusing中添加新的相应声明_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()导致异常?

标签: c#.netentity-framework.net-coreentity-framework-core

解决方案


推荐阅读