C#線程模式我有一個實現(),我最初使用ThreadPool.QueueUserWorkItem開始/結束調用模式線程我的工作一類。在線程上完成的工作不會循環,但需要一些時間來處理,因此工作本身不容易停止。,讓我沖洗
我現在有副作用,有人使用我的類正在調用Begin(帶回調)一大堆次來做很多處理,所以ThreadPool.QueueUserWorkItem正在創建大量線程來執行處理。這本身並不壞,但有些情況下,他們想放棄處理並開始一個新的過程,但他們被迫等待他們的第一個請求完成。
因爲ThreadPool.QueueUseWorkItem()不允許我取消線程我試圖想出一個更好的方法排隊工作,也許在我的類中使用一個明確的FlushQueue()方法來允許調用者放棄我的隊列中的工作。
任何人有適合我的需要線程模式有何建議?
編輯:我目前針對2.0框架。我目前認爲消費者/生產者隊列可能有效。有沒有人有關於沖洗隊列的想法?
編輯2問題澄清: 由於我每次呼叫者使用與回調開始創建線程池一個全新的線程時使用的開始/結束模式在我的課。這個調用進行了非常少量的處理,而不是我想要取消的地方。這是我希望阻止的隊列中未完成的工作。
ThreadPool默認情況下每個處理器創建250個線程的事實意味着,如果您要求ThreadPool使用QueueUserWorkItem()排隊大量項目,最終會創建大量的併發線程,停止。
主叫方能夠將CPU推到100%,不僅是工作,但工作的創作,因爲我的方式排隊的線程。
我通過使用生產者/消費者模式,我可以排隊這些線程到我自己的隊列中,讓我來主持,我創建多少個線程,以避免CPU秒殺創建所有的併發線程的思想。我可能會允許我的班級的調用者在放棄請求時清除隊列中的所有作業。
我目前正試圖自己實現這一點,但認爲SO是一個很好的地方,有人說看看這段代碼,否則你將無法沖洗,因爲這或沖洗不是正確的術語,你的意思是這個。
感謝您的插件,賈裏德;)這,順便說一句,是這個「最好的」方法。可供選擇的方法確實不足,並且都有一些非常嚴重的問題。 – 2010-03-18 22:07:52
我目前的目標是2.0框架,所以並行擴展不會幫助我的情況。 – Jeff 2010-03-18 22:33:35