在我的控制台应用程序中,我有几个类(让他们称之为MyClass1
,MyClass2
,...)有一个方法应该检查是否存在某些记录数据库(不同的类等待不同的记录)并仅在需要的记录存在时返回。我目前有一个使用无限循环和Thread.Sleep
的简单实现。这种方法确实有效,但它往往会导致高CPU负载。使这些方法对CPU更友好的方法是什么?
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 :(得分:1)
假设您正在连接到SQL(2005或更高版本)数据库,您可以查看SqlDependency。这是一篇关于SqlDependency和EF的代码项目的文章:
http://www.codeproject.com/Articles/496484/SqlDependency-with-Entity-Framework