我正在将 asp.net core api 与 EF core 一起使用,今天我收到了此错误消息,它让我很困惑为什么会发生这种情况。
Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
at Mapster.TypeAdapterConfig.Remove(TypeTuple key)
at Mapster.TypeAdapterConfig.NewConfig[TSource,TDestination]()
at InventoryService.GetCategories(Int32 inventoryCenterId)
at Controllers.InventoriesController.GetCategories(Int32 centerId)
这是它所指的代码。
TypeAdapterConfig<Category, CategoryDto>
.NewConfig()
.IgnoreIf((src, dest) => string.IsNullOrEmpty(src.MetaTitle), dest => dest.MetaTitle)
.IgnoreIf((src, dest) => string.IsNullOrEmpty(src.MetaDescription), dest => dest.MetaDescription);
var categories = dbContext.Centers.Where(x => x.Id == CenterId).SelectMany(x => x.Categories).OrderBy(x => x.Name).ToList();
return categories.Adapt<List<CategoryDto>>();
似乎任何尝试访问该方法的人都会遇到同样的错误。我重置了 IIS,一切正常,但我正在试图弄清楚发生了什么。
不确定还要添加什么。
答案1
当多个线程修改字典时,.NetCore 会故意抛出上述消息的 InvalidOperationException。关键是使用线程安全的 ConcurrentDictionary。
请参阅GitHub 问题。