2010-08-27 65 views
1

(爲理由 - 我從來沒有使用線程的工作所以下面的描述僅僅是一個想法,我希望你能罵)線程,隊列和工作流程

的任務概述:
- 有一些名單對象
- 我們需要檢查對象是否以某種方式更改
- 如果更改 - 應用一些邏輯(例如 - 顯示通知)。

這是我認爲它應該實現:

我們創造定時器,觸發每分鐘,這遍歷對象列表,找到需要進行檢查的對象。之後,我們將該對象(或特定的 - 包含對象和任務描述的某個任務對象,以檢查它是否已更新)添加到隊列中。

工作者(線程池中的某個線程)等待,直到將某些內容添加到隊列中,並在發生之後 - 它接受任務並對其進行處理:檢查對象是否已更改。如果是這樣 - 它增加了另一個任務,通知一個。現在,如果有必要,處理通知任務的另一名工作人員將處理此任務。

那麼,這是完全錯誤的想法?這裏可以改進或改變什麼?

UPD:根據第一個回答:對象依賴於某些repote資源,而「change」意味着某些遠程數據發生了變化(或以某種特定方式更改)。所以這不能用INotifyPropertyChanged來解決。

回答

3

如果這些'對象'是.NET對象,爲什麼要輪詢它們?爲什麼不實施類似INotifyPropertyChanged界面的東西,並且有適當的,即時的更改通知?

否則,如果它們實際上可以可以通過查詢測試某種外界物體,然後將觸發關閉一個事件,然後輪詢每個對象,並調用通知回UI線程定時器可能足夠的,或者如果你想要定時器事件快速完成(例如它可以立即響應另一個事件),請發起一個Task去檢查每個對象,並通知UI(使用Invoke)是否已經改變。

沒有必要排隊每個單獨的對象並分別處理它們(是否存在),也沒有任何需要並行處理它們,因此在工作線程(或Task)中對它們進行簡單循環似乎就足夠了。

+0

有 - 因爲「檢查」操作可能是「長」,因爲對象與某些遠程第三方資源有關。 – zerkms 2010-08-27 06:03:47

+0

「,也沒有任何要求並行處理它們,所以在工作線程中對它們進行簡單循環」 - 在這種情況下,所有工作時間和工作要做的邏輯 - 在同一個地方。有一個問題,我描述了當它們完全被隊列分隔時的場景:一部分是做出更新決定,另一部分是做出決定處理,並在它們之間排隊。 – zerkms 2010-08-27 06:07:40

+0

我會說,這個答案或多或少是正確的 - 在對象上循環播放,觸發一個Task來輪詢每個對象,並向UI線程報告。這樣你就不必擔心管理輪詢線程等問題了。 – 2010-08-27 06:16:44

0

我只是想知道你是否可以考慮隊列等待任務。任何推送到此隊列的任務對象都等待處理。在您的工作線程中,您將阻塞隊列,直到某個項目可用。如果你想要一些並行性,你可能會有多個工作線程來做這件事。

您可能還有一份顯示正在進行中的任務的列表,以及另一份顯示哪些完成的列表。

我不是C#程序員,但在Java中,我期待使用BlockingQueue接口的實現。

+0

不,我的場景中的隊列是應該處理的任務,只要任何工作人員可用於執行。 – zerkms 2010-08-27 06:10:27