2009-08-28 131 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); }