【发布时间】:2017-01-11 17:29:27
【问题描述】:
我有一个 SignalR 客户端应用程序,用 C# 编写,它从 Hub 订阅一个事件。当事件被“触发”时,应用程序执行一个方法。
问题是对于该客户端的所有此类事件都是按顺序处理的。
用例/流程:
- 在浏览器中,用户单击按钮
- 该按钮触发对 SignalR Hub 的调用
- SignalR Hub 将消息发送到特定 SignalR 客户端
- SignalR 客户端接收事件/消息
- SignalR 客户端调用将消息存储在数据库中的方法
- SignalR 客户端调用 Hub 中的方法以返回结果
- 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("...");
});
有什么推荐的做法可以同时处理多个事件?
【问题讨论】:
-
你能详细说明一下吗...也许有一个示例场景?
-
嗨@Hackerman。问题已更新。你能看一下吗?
-
也许可以使用
Task.Runfor 它,但我不确定您是否可以从不同的线程发回响应。我想知道设计。为什么 Web 应用程序(Hub)要通过 SignalR 与数据库层通信,而不使用 Web 服务或类似的东西。 -
请看stackoverflow.com/questions/10180052/…你基本上不需要做任何事情来获得并发,你可能只担心你的共享状态
标签: c# signalr signalr.client