2014-04-16 39 views
1

我有一個C#類,它使用BackgroundWorker輪詢特定數據庫表中的更改。如果事情發生變化,它會觸發一個事件。另外,我有一個類Token,它有一個處理這個事件的處理器,它基本上把令牌狀態設置爲「髒」。用異步/等待替換BackgroundWorker輪詢數據庫

現在我問自己是否可以比每隔幾毫秒輪詢一次數據庫更好。我想在我的令牌中製作異步方法,比如

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

但是我應該在這裏等待什麼?我的BackgroundWorker只有它的Do_Work和RunWorkerCompleted方法。 BackgroundWorker不需要檢查所有的時間,但至少當有人調用/等待IsDirty()方法時。

+0

考慮用Task替換BackgroundWorker。 – usr

回答

0

是的,有一些肯定比投票數據庫更好。 Using SqlDependency in a Windows Application

您可以創建一個依賴對象,其中SQL Server會通知您某些內容已更改(記錄已插入,更新,刪除)。

+0

我知道SqlDependency,但它使我的應用程序非常慢,因爲它在執行查詢時會阻塞,並且我沒有可能使執行調用異步。在檢查更大的查詢(例如2個或更多聯接)時,最多需要2秒。這就是爲什麼我圍繞SQL Server的更改跟蹤功能構建這個包裝以查詢CHANGETABLE()函數的原因。 – kreilinger