我有一名初学者。它做了一些初始化。我希望其他工人等待这位初学者。我想到的唯一方法是将消息放入队列中。工人将轮询队列。他们将在阅读消息后开始。有更好的同步方法吗?
答案 0 :(得分:2)
队列轮询的问题:一旦一个工作人员看到“我准备好了”队列消息,其他工作人员会怎么样?如果读者删除队列消息(应该如此),其他人就永远不会看到它。如果读者没有删除它,那么剩下的时间就会在那里留下那条消息(下次启动时,消息仍然存在)。
如果您使用AreYouRunning()方法返回true / false在启动工作者角色实例上托管了一个非常简单的wcf服务,该怎么办?如果实例仍在OnStart()中,则您应该无法连接到该服务。连接后,只需检查返回值即可。您只需要其他角色在其OnStart()或Run()中设置某种类型的轮询机制来进行定期轮询。
可能还有其他方法可以执行此操作,例如在Azure表中有一行。您仍然必须确保在其他角色启动之前可以从该表中清除“运行”状态,因此wcf服务理念可能会更好地满足您的需求。