Назад | Перейти на главную страницу

Это проблема IIS или проблема с базой данных? Непараллельные коллекции должны иметь эксклюзивный доступ

Я использую asp.net core api с ядром EF, и сегодня я получил это сообщение об ошибке, и оно сбивает меня с толку, почему это могло произойти.

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, и все прошло хорошо, но я пытаюсь понять, что произошло.

Не уверен, что еще добавить.

.NetCore намеренно генерирует исключение InvalidOperationException с указанным сообщением, когда словарь изменяется несколькими потоками. Ключ в том, чтобы использовать потокобезопасный ConcurrentDictionary.

Пожалуйста, посмотрите Проблема с GitHub.