使用 Singleton 处理订单?

Process Orders using Singleton?

我有一个 table 的订单将由不同的服务处理。因此,假设一个服务开始处理一批订单,并且在它完成之前另一个服务来并开始处理同一批,因为第一批尚未完成并且订单 table 没有更新以反映这一点。

我们如何确保这种情况不会发生?因此,如果一个服务正在处理这个批次,那么另一个服务应该是 "locked"。

最好的方法是什么?

谢谢。

编辑:基本上我正在寻找这样的东西

    public void ProcessOrders(){
synchronized (this) {
    if(IS_Process_RUNNING){
        logger.error("ProcessOrders() is already running.");
        return;
    }
    IS_Process_RUNNING = TRUE;
}

try{
    DoSomeWork();
}
catch(Exception e){
    LogFatalError.logFatalError("Error processing orders.....", e);
}
finally{
    IS_Process_RUNNING = FALSE;
}

}

因此,如果一个进程(第一个)调用此方法,则 is_process_running 标志将设置为 false,并且它会执行它应该执行的操作。并且还将标志设置为 true,以便差异进程到达这里时将立即退出。

    private static readonly Object obj = new Object();
    lock (obj) { ..... }

这行得通!谢谢