2009-08-28 128 views
1

在我們當前項目的建成,對於一些業務,我們將消息發送到如已完成的訂單數據庫,展開請求,被拒絕訂單中包含的OrderId相關信息....所有消息對應一個實現Command Pattern的Command類。線程池的任務依賴於其他任務

interface ICommand 
{ 
    void Execute(); 
} 

public class RequestStartedCommand:ICommand 
{ 
    public void Execute() 
    { 
    //do the related work..... 
    } 
} 

//other commands... 

一個Windows服務使用這個消息,然後將它們轉換成上面的命令並通過ThreadPool執行命令。

,但需要一些命令來樣訂單ID = 23其他命令之前執行步驟完成後,指示命令必須同階的拒絕的訂單命令之前執行。我該怎麼做,或者我應該遵循哪種策略?任何示例或文檔都是有用的。

回答

1

我會嘗試執行一些依賴檢查。類似拒絕的命令命令需要檢查某些狀態是否有效,然後才能執行。 經理/服務人員從列表中接受命令,應用其驗證檢查,並在驗證未完成時將其返回列表。

謹防飢餓,或卡住在列表中的命令,直到永遠。

0

我一起創造鏈命令的方法和使用事件通知完成,成功,失敗,或取消命令的其它命令。查看觀察者模式(http://en.wikipedia.org/wiki/Observer_pattern),瞭解如何通過這些通知。另外,要小心命令中的循環依賴關係,這樣如果兩個命令相互等待,那麼任何一個都不會執行。我可能會使用事件來實現這一點。

0

如果你使用一個線程池,你可能有一個請求隊列。您可能會將一組依賴請求添加到隊列中的每個請求對象。當主請求完成時,具有螺紋PROC把相關請求隊列上作爲主要的請求:

class RequestObject { 
    // ... request details 
    List <RequestObject> dependentRequests; 
}

void PerformRequest (RequestObject request) { // ... perform the requested object foreach (var dr in request.dependentRequests) AddRequestToQueue (dr); }