C# 将BackgroundWorker轮询数据库替换为Async/Await

C# 将BackgroundWorker轮询数据库替换为Async/Await,c#,asynchronous,polling,C#,Asynchronous,Polling,我有一个C类,它使用BackgroundWorker轮询特定数据库表的更改。如果某些内容发生更改,它将触发一个事件。此外,我还有一个类令牌,它有一个用于此事件的处理程序,基本上将令牌状态设置为dirty 现在我问自己是否有比每隔几毫秒轮询一次数据库更好的方法。我想在我的token-like中创建一个异步方法 public async Task<bool> IsDirty() { return await Something(); } 但我应该在这里等待什么呢?我的Backg

我有一个C类,它使用BackgroundWorker轮询特定数据库表的更改。如果某些内容发生更改,它将触发一个事件。此外,我还有一个类令牌,它有一个用于此事件的处理程序,基本上将令牌状态设置为dirty

现在我问自己是否有比每隔几毫秒轮询一次数据库更好的方法。我想在我的token-like中创建一个异步方法

public async Task<bool> IsDirty()
{
    return await Something();
}

但我应该在这里等待什么呢?我的BackgroundWorker只有其Do_Work和RunWorker Completed方法。BackgroundWorker不需要一直检查,但至少在有人调用/等待IsDirty方法时是这样。

是的,有比轮询DB更好的方法


您可以创建一个依赖关系对象,SQL Server将在其中通知您某个内容已更改插入、更新或删除的记录。

考虑将BackgroundWorker替换为Task。我知道SqlDependency,但这会使我的应用程序非常慢,因为它在执行查询时会阻塞,而且我不可能使执行调用异步。当检查较大的查询(例如2个或更多联接)时,最多需要2秒钟。这就是为什么我围绕SQLServer的更改跟踪功能构建了这个包装器,用于轮询CHANGETABLE函数。