我需要一个排队的消息代理以分布式(在连续帧上)的方式调度消息。在下面显示的示例中,它将处理不超过 10 个订阅者,然后在进一步处理之前等待下一帧。
(为了让那些不熟悉 Unity3D 的人澄清,Process()方法是使用 Unity 的内置方法运行的,StartCoroutine()并且 - 在这种情况下 - 将持续游戏的整个生命周期 - 从队列中等待或处理。)
所以我有一个相对简单的类:
public class MessageBus : IMessageBus
{
private const int LIMIT = 10;
private readonly WaitForSeconds Wait;
private Queue<IMessage> Messages;
private Dictionary<Type, List<Action<IMessage>>> Subscribers;
public MessageBus()
{
Wait = new WaitForSeconds(2f);
Messages = new Queue<IMessage>();
Subscribers = new Dictionary<Type, List<Action<IMessage>>>();
}
public void Submit(IMessage message)
{
Messages.Enqueue(message);
}
public IEnumerator Process()
{
var processed = 0;
while (true)
{
if (Messages.Count …Run Code Online (Sandbox Code Playgroud)