В моем консольном приложении у меня есть пара классов (давайте назовем их 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...
...
ли вы попробовать с таймером? – Steve
где бесконечный цикл? – Default
Можете ли вы сделать метод 'async' и использовать' waitait Task.Delay (500); '? – David