小编bad*_*ror的帖子

如何在纯 C# 中制作排队消息代理

背景

我需要一个排队的消息代理以分布式(在连续帧上)的方式调度消息。在下面显示的示例中,它将处理不超过 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)

c# publish-subscribe unity-game-engine

5
推荐指数
1
解决办法
647
查看次数

标签 统计

c# ×1

publish-subscribe ×1

unity-game-engine ×1