C#客户端如何同时处理多个事件
How to handle multiple events concurrently in C# client
我有一个用 C# 编写的 SignalR 客户端应用程序,它从 Hub 订阅一个事件。当事件为 "fired" 时,应用程序执行一个方法。
问题是,对于该客户端的所有此类事件都是按顺序处理的。
用例/流程:
- 在浏览器中,用户单击按钮
- 该按钮触发对 SignalR Hub 的调用
- SignalR Hub 将消息发送到特定的 SignalR 客户端
- SignalR 客户端收到 event/message
- SignalR 客户端调用将消息存储在数据库中的方法
- SignalR 客户端调用集线器中的方法来return结果
- 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)
);
我有一个用 C# 编写的 SignalR 客户端应用程序,它从 Hub 订阅一个事件。当事件为 "fired" 时,应用程序执行一个方法。
问题是,对于该客户端的所有此类事件都是按顺序处理的。
用例/流程:
- 在浏览器中,用户单击按钮
- 该按钮触发对 SignalR Hub 的调用
- SignalR Hub 将消息发送到特定的 SignalR 客户端
- SignalR 客户端收到 event/message
- SignalR 客户端调用将消息存储在数据库中的方法
- SignalR 客户端调用集线器中的方法来return结果
- 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)
);