无限循环的替换

时间:2016-08-15 13:50:19

标签: c# infinite-loop

在我的控制台应用程序中,我有几个类(让他们称之为MyClass1MyClass2,...)有一个方法应该检查是否存在某些记录数据库(不同的类等待不同的记录)并仅在需要的记录存在时返回。我目前有一个使用无限循环和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...
...

1 个答案:

答案 0 :(得分:1)

假设您正在连接到SQL(2005或更高版本)数据库,您可以查看SqlDependency。这是一篇关于SqlDependency和EF的代码项目的文章:

http://www.codeproject.com/Articles/496484/SqlDependency-with-Entity-Framework