C#客户端如何同时处理多个事件

How to handle multiple events concurrently in C# client

我有一个用 C# 编写的 SignalR 客户端应用程序,它从 Hub 订阅一个事件。当事件为 "fired" 时,应用程序执行一个方法。

问题是,对于该客户端的所有此类事件都是按顺序处理的。

用例/流程:

  1. 在浏览器中,用户单击按钮
  2. 该按钮触发对 SignalR Hub 的调用
  3. SignalR Hub 将消息发送到特定的 SignalR 客户端
  4. SignalR 客户端收到 event/message
  5. SignalR 客户端调用将消息存储在数据库中的方法
  6. SignalR 客户端调用集线器中的方法来return结果
  7. Hub 将结果传递给用户

如果另一个用户同时单击该按钮,SignalR 客户端将一次只存储一条消息。

客户端示例:

myHub.On<ExecuteRequestModel, string>("Execute", (request, to) =>
{
    logger.Info("Execute request received for connectionID: " + connection.ConnectionId);

    myMethod();

    myHub.Invoke("ExecuteResult", response, to);

    logger.Info("Execute request processed");
    logger.Info("...");
});

有任何以并发方式处理多个事件的推荐做法吗?

这可以使用 Async/Await 来解决。 Async函数负责将结果回复给Hub。

myHub.On<ExecuteRequestModel, string>("Execute", async (request, to) => 
    await onExecute(request, to)
);