2011-03-26 193 views
1

有人知道我將如何完成以下任務嗎?我一直在玩C#中的線程池,我不覺得這會適合它。C#多線程概念問題

  1. 啓動應用程序

  2. 檢查新客戶>客戶端有項目,他們希望一些工作做了。

  3. 在執行任務之前解析客戶端請求。現在應該排隊檢查。

  4. 檢查每個客戶端(時間間隔示例:30秒)>執行任務。

  5. 同時我必須重複步驟2-3,因爲我期待:

    1. 新客戶
    2. 修改客戶端。
    3. 沒有變化。

其需要注意的是會有很多的客戶,但他們的任務應該進行相當快的,但我不希望從一個客戶的任務需要更長的時間來處理創造一個死鎖。

在此先感謝!

+2

提高您的**收費**。 – 2011-03-26 04:28:45

+0

謝謝,我會牢記這一點。 – BlackTea 2011-03-26 19:33:28

+0

現在應該會更好。 – BlackTea 2011-03-28 00:41:33

回答

0

不是像你一樣使用「拉」模型,而是使用「推」模型來代替?也就是說,使用事件而不是每隔x秒檢查一次客戶端狀態。

如果你不能這樣做,你可以使用線程池或者一個windows服務。

Riana

+0

我同意我不喜歡根據EventResetArg。 – BlackTea 2011-03-29 15:38:38

0

我同意推模式在客戶端發起的行動將更好地工作,從長遠來看,這樣的服務器只有當真正要做些什麼,而不是不斷地輪詢工作全部客戶端。

客戶端可以將請求插入到隊列中並由服務器處理它們。這樣,您就可以控制服務器可以並行處理多少個請求,而不會對教師產生干擾。

BlockingCollection是在.Net 4中引入的新類,專門爲此類工作而設計。 This是一篇關於如何使用它的非常好的文章。如果你剛接觸.Net並行編碼,你可能想閱讀整個系列,非常好的閱讀。

GJ

+0

我如何解決這個問題,因爲不得不重複步驟2-3並每隔xmin處理客戶端任務。我認爲BlockCollection是我昨晚看到的一個好主意。試圖用一個簡單的概念來解決它。 – BlackTea 2011-03-29 15:37:53

+0

我不會輪詢客戶端,而是客戶端將工作放到隊列中。然後服務器完成工作並通過回調將結果發回。你用什麼通信,WCF? – gjvdkamp 2011-03-29 16:21:20

+0

我只是在.net 4.0中執行它,現在是一個命令提示符,但它最終將作爲服務運行。 – BlackTea 2011-03-31 06:03:12