在我的控制台应用程序中,我有几个类(我们称它们为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)
}
这些方法的使用非常简单:调用代码创建一堆对象,使用Task.Factory.StartNew
启动每个对象的WaitForRecord
方法,定期检查是否有任务完成执行,并在控制台中打印结果,如下所示:
MyClass1 is still waiting for record...
MyClass2 has found the record...
...
假设您正在连接SQL(2005或更高版本)数据库,您可以查看SqlDependency。这里有一篇关于SqlDependency和EF的代码项目的文章:
http://www.codeproject.com/Articles/496484/SqlDependency-with-Entity-Framework