У меня есть метод, который берет IEnumerable, фильтрует его дальше и перебирает отфильтрованную коллекцию, чтобы изменить одно свойство.
Я наблюдаю очень странное поведение.
Пока метод зацикливаетсячерез отфильтрованный IEnumerable<Entity>
после нескольких итераций (я точно не подсчитал, сколько) один из элементов в нем удаляется.
private async Task<bool> UpdateSomeValue(IEnumerable<BusinessEntity> entities, BusinessEntity entityToDelete)
{
//FIlter the IENumerable
var entitiesToUpdateSequence = entities
.Where(f => f.Sequence > entityToDelete.Sequence);
if (entitiesToUpdateSequence.Any())
{
var testList = new List<FormBE>(entitiesToUpdateSequence);
Debug.WriteLine(entitiesToUpdateSequence.Count()); // 5
//DUring this loop, after a few iterations, one item gets deleted
foreach (var entity in testList)
{
entity.Sequence -= 1;
}
Debug.WriteLine(entitiesToUpdateSequence.Count()); // 4
return await _someRepo.UpdateEntitySequence(entityToDelete.Id1, entityToDelete.ID2, testList);
}
return await Task.FromResult(true);
}
Этот метод вызывается так:
var entities = await entitiesTask.ConfigureAwait(false);
var entityToDelete = entities.Single(f => f.Key.Equals("someValue"));
var updated = await UpdateSomeValue(entities, entityToDelete);
и все, нет никакой ссылки на коллекцию entities
. Поэтому его нельзя изменить из любого другого потока.
Я временно нашел слово вокруг, скопировав отфильтрованный IEnumerable в список, а затем используя список для дальнейшей работы (содержимое списка остается тем же после цикла).
Что может быть причиной этой проблемы?