我已閱讀TPL文檔和許多教程,但沒有涵蓋我想實現的模型。.NET任務並行庫
某些算法總是有固定數量的迭代。
我需要不斷運行的線程(儘可能多的):
,而(真)
- 從主線程獲取數據
- 執行繁重耗時的任務(在單獨的線程)
- 更新主線程信息
另外我需要的機制,將abl e設置鬧鐘(例如鬧鐘)。 5秒)。五秒鐘後,所有工作必須暫停一段時間,然後重新開始。
我應該使用Task.ContinueWith相同的任務嗎?但是我沒有處理之前任務啓動的結果,而是我更新了主線程中的數據結構,然後決定將要輸入的新任務迭代將會如何...
我該如何離開TPL決定應該有多少任務創造最佳效率?
不,我使用BackgroundWorkers,因爲他們有很好的RunEventCompleted事件 - 它裏面我在我的主線程,所以我可以更新我的MAIN結構,檢查時間約束,然後再次在完成的BackgroundWorker上調用StartAsync。這很好,很清楚,但可能非常不方便。 我需要使它在多處理器,多核服務器上高效運行。
一個問題是計算總是在線,從不停止。還有一些網絡,它可以遠程詢問MAIN結構的當前狀態。
第二個問題是關鍵時間控制(我必須有精確的計時器 - 當它停止時,沒有線程可以重新啓動)。然後在結束之後會有特殊的高優先級任務,所有工作都會恢復。
第三個問題是操作沒有上限。
這三個約束,從我所觀察到的,都不會沿着TPL走 - 我不能使用類似Parallel.For的東西,因爲集合是由任務本身的結果實時修改的...... 我沒有也知道如何結合:
- 讓TPL決定多少線程應創建
- 用sort線程的一生乳寧(有停頓和連續重新啓動之間的同步點)
- 創建線程只有一次能力在開始時(他們應該只用不斷新的pa重新啓動rameters)
有人可以給我提示嗎? 我知道如何做到這一點,不好,不合時宜的方式。我描述了一些小的要求,這些要求阻止我這樣做。我有點困惑。
看起來您似乎回答了您的原始問題,我不確定新的問題。 – Jodrell 2012-04-05 10:42:47