刚刚看到一篇关于消息排队的文章。我有一个服务,每1秒运行一个进程。该过程将名为“ProcessLock”的静态bool更改为true。然后,该过程在执行之前检查此变量是否为true,如下所示:
if (!ProcessLock)
{
ProcessLock= true;
//dostuff
}
但是如果这个过程再循环并在括号之后输入另一个线程之后但在将bool更改为true之前输入括号,那么我们就会遇到问题,因为里面的代码会开始运行两次相同的记录。这个条件叫什么?我确定它有一个多线程术语?
无论如何,真正的问题是我可以使用MSMQ来解决这个问题吗?一般来说这个过程是什么?
答案 0 :(得分:0)
消息传递通常用于确保可靠的传递并放松服务之间的时间耦合。
据我所知,您的服务每次执行时都会对相同的数据进行操作。在这种情况下,消息队列对您没有多大帮助;毕竟,可以并行处理多个消息。您可以将消息处理配置为在单个线程上运行(一次处理一条消息),但简单的锁定可以更轻松地解决此问题。
另一方面,如果您可以为要处理的服务创建工作项,那么某种队列将是有益的。它可以是简单的本地Queue<WorkItem>
,如果您不关心可靠性并且不需要进程间通信,则不需要复杂的消息传递基础结构。