Асинхронное обращение к таблице БД (C# EF Core)
Пишу метод, который мониторит наличие записей в определенной таблице БД и по каждой записи запускает обработчик (метод HandleRequest). Код метода, за вычетом ненужных деталей, следующий:
List<Requests> requestsList = _dbcontext.Requests.ToList();
foreach (var request in requestsList)
{
var doesEntryExistAsyncTask = _context.Requests
.Where(r => r.StartDateTime == request.StartDateTime)
.Where(r => r.EndDateTime == request.EndDateTime)
.Where(r => r.listBOnum.Equals(request.listBOnum))
.AnyAsync();
while (await Task.Run(() => doesEntryExistAsyncTask)) //Пока запись существует, выполняем HandleRequest
{
HandleRequest(someParams);
}
}
Идея в том, чтобы метод запускал HandleRequest, только пока соответствующая запись в БД существует. Если запись в БД удалена, обработка по ней должна прекращаться. Для каждой имеющейся записи выполняется свой HandleRequest.
На практике получается, что HandleRequest работает по одной записи до победного, игнорируя все остальные, даже в том случае, если соответствующая запись оказывается удалена из БД.
Вопрос следующий: Проблема с тем, что я неправильно написал асинхронную часть, или же здесь изначально следовало применить какой-то иной подход, например, распараллеливание (но в таком случае могут возникнуть проблемы с одновременным доступом к контексту БД)?