2015-09-27 138 views
-1

我真的很陌生,很想學習最有效的方法和實用程序類來幫助處理線程。帶鎖定的C#線程池

我想要做的是管理一個作業隊列。每項工作都有一個適用的組。作業可以並行運行,但每個分組只能有一個作業。在一組要處理的1000個作業中,可能會有100個不同的分組。

僞代碼,這將是:

var job = Jobs.First(job.GroupNotExecuting); 
    job.RunSynchronously(); 

job.GroupNotExecuting檢查,看看是否有是該組的可用鎖。

什麼是在C#中實現這個最好的方法?

如上所述,我是C#的新手,所以只想爲這樣的場景獲得最佳習慣。將不勝感激!

(在它的事項的情況下,我在Visual Studio 2013的工作,.NET框架4.5)

回答

0

您可以嘗試使用每個類的布爾爲「isBusy」標誌。 當作業開始時,它將「isBusy」設置爲true,然後執行它應該做的任何操作。但在作業完成之前,它將「isBusy」設置爲false。

對於調用代碼,它只需檢查「isBusy」布爾值。如果這是真的,那麼這份工作仍在繼續。如果它是假的,那麼這項工作已經完成,或者還沒有運行。

或者,使用System.Threading命名空間。 這些給你一個事件,可以在backgroundworker完成時調用。

+0

謝謝,我找到了一個類似的解決方案;我現在寫出來。 –

0

最後我用SemaphorSlim類來處理更新。

對於每個作業,我都添加了從共享/靜態列表獲取信號量的過程,並等待它可用。這樣他們可以被添加到相同的聯合池中並且在它們變得可用時被處理。

不足之處在於,理論上一個線程可能正在等待另一個線程處理,否則它可能在此期間能夠尋找另一個工作來處理。