Как асинхронно просматривать несколько вызовов БД и прерывать цикл, когда он находит хотя бы один вызов - PullRequest
0 голосов
/ 28 июня 2019

Мне нужно сделать несколько вызовов дб, для каждого клиента есть одна дб.так как я не уверен, с каким клиентом мне нужно запрашивать, я должен найти соответствующую запись, проверяя каждую базу данных.В базе данных будет только одна соответствующая запись, и если я найду соответствующую запись, я смогу просто вернуть эту запись и прекратить искать запись и вернуться.Этот поиск продолжается до тех пор, пока я не найду соответствующую запись, если не просто верну пустой объект.

Я хочу знать, как сделать несколько асинхронных вызовов в цикле foreach и разорвать цикл, если я найду данные.

Я попытался перебрать все вызовы и сделать вызовы, чтобы вернуть Задачи, добавить их в список задач и запустить все задачи одновременно.Но я не понял, как сохранить данные, если какой-либо из вызовов вернется и продолжится без дальнейших вызовов.

ContextFactory class

     public List<ISomeContext> GetCotrakContextList()
     {
         List<ISomeContext> someContext = new List<ISomeContext>();
         CotrakContextCollections cotrakContext = new 
         CotrakContextCollections();
         foreach (ConnectionStringSettings c in 
          ConfigurationManager.ConnectionStrings)
         {
             if(c.Name.StartsWith("Cotrak"))
             {
                 cotrakContext.Add(_someContext(c.Name));
             }
         }

         return someContext;
     }

Сервисный уровень

List<SomeClass> someList = new List<SomeClass>();

var list = new List<Task>();

try
{
    using (var someContexts = instContextfactory.GetSomeContextList())
    {
        foreach (var someContext in someContexts)
        {
            list.Add(new Task(someContext.someClass.GetSomethingById(Id)));
        }
// I need to add the result to from the call to list.
        Task.WaitAll(list.ToArray());

    }

// Need to make validations on the list from above foreach loop
         if (someList.Count != 1)
         {
             Result = someList.Any() ? "MULTI" : "NODATA";
         }
}
 catch (Exception ex)
 {
     log.Error($"Error looking for record", ex);
 }

У меня есть список вызовов БД, которые мне нужно пройти по циклу и получить результат списка типов объектов.Только одна БД будет иметь соответствующие записи, и если я найду данные, я могу прекратить совершать вызовы к другим БД.

Мне нужно сделать асинхронные вызовы в список БД и вернуть объект или нуль из него.

...