Асинхронное обращение к таблице БД (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 работает по одной записи до победного, игнорируя все остальные, даже в том случае, если соответствующая запись оказывается удалена из БД.
Вопрос следующий: Проблема с тем, что я неправильно написал асинхронную часть, или же здесь изначально следовало применить какой-то иной подход, например, распараллеливание (но в таком случае могут возникнуть проблемы с одновременным доступом к контексту БД)?


Ответы (0 шт):