2016-08-15 7 views
0

В моем консольном приложении у меня есть пара классов (давайте назовем их MyClass1, MyClass2, ...), имеющих метод, который должен проверять наличие определенных записей в базе данных (разные классы ждут разных записей) и возвращаются только тогда, когда существуют необходимые записи. В настоящее время у меня простая реализация с использованием бесконечного цикла и Thread.Sleep. Этот подход действительно работает, но он имеет тенденцию вызывать высокую загрузку процессора. Каким образом сделать эти методы более удобными для ЦП?Замена для бесконечного цикла

public override void WaitForRecord() 
{ 
    MyDatabaseRecord record = null; 

    while (record == null) 
    { 
     Thread.Sleep(500); 
     using (var dc = new MyDataContext()) 
     { 
      record = dc.Documents 
       .Where(/*condition*/) 
       .SingleOrDefault(); 
     } 
    } 
    Logger.Info("Record with ID " + record.Id + " found at " + DateTime.Now) 
} 

Использование этих методов довольно проста: код вызова создает кучу объектов, запускает WaitForRecord метод для каждого объекта с помощью Task.Factory.StartNew, периодически проверяет наличие каких-либо задач закончили выполнение, и выводит результат в консоль, как это:

MyClass1 is still waiting for record... 
MyClass2 has found the record... 
... 
+0

ли вы попробовать с таймером? – Steve

+0

где бесконечный цикл? – Default

+0

Можете ли вы сделать метод 'async' и использовать' waitait Task.Delay (500); '? – David

ответ

Смежные вопросы