什麼將是實現具有關鍵任務是進行如下操作的最佳方法: - )實施「只是一個」和「不平行」與任務並行庫語義
選項1只有這一個密鑰有待處理。例如,可以使用ASP.NET MVC來爲縮略圖圖像排隊單個渲染,而不管圖像Url被擊中多少次。只有一個運行,所有其他請求等待完成。
選項2)所有具有相同密鑰的項目必須按順序執行。可用於例如確保將文件從後備存儲獲取到本地緩存的操作不會同時嘗試將文件轉移到緩存。選項1是這種情況的一個特例,其中使用同一個鍵的後續操作只是被丟棄(通常只保存文件存在檢查)。
我有一個現有的WorkQueue處理這兩種情況(以及Apartment狀態,ThreadPriority設置和最大並行度)。 TPL似乎是取代這一點的最佳解決方案,並將帶來更好的取消選項。
具有延續性的嵌套任務看起來很有希望,但維護當前隊列任務的字典很快就會在TaskFactory和TaskScheduler類之間變得雜亂無章。從Task繼承也是有問題的,因爲TaskFactory和TaskScheduler在Task上都是通用的。
大多數任務並行示例假定該任務集是事先知道的。在這種情況下,新任務會一直添加,需要根據請求的操作和傳入的密鑰將其丟棄或鏈接到現有任務。
是否有人使用TPL實現了與此類似的任何操作?如果是這樣,你有沒有參加你的Task,TaskScheduler和TaskFactory類?
錯讀你的問題,oops – 2010-08-31 23:15:00