2017-01-11 59 views
3

我有一个用C#编写的订阅来自Hub的事件的SignalR客户端应用程序。当事件被“解雇”时,应用程序执行一个方法。如何在C#客户端中同时处理多个事件

现在的问题是,所有这类客户端的事件都是按顺序处理的。

用例/流量:

  1. 在浏览器中,用户点击一个按钮
  2. 的按钮触发一个SignalR枢纽
  3. 的SignalR中心打电话将消息发送到特定的SignalR客户端
  4. SignalR客户端接收事件/消息
  5. SignalR客户端调用一个方法将消息存储在数据库中
  6. 的SignalR客户端调用轮毂中的方法返回的结果
  7. 集线器提供给用户的结果

如果另一个用户点击的同时按钮,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("..."); 
}); 

有任何建议的做法来处理并发的方式多个事件?

+0

你能详细解释一下......也许有一个示例场景吗? – Hackerman

+0

Hi @Hackerman。问题已更新。你可以看一下吗? –

+0

也许可以使用'Task.Run'作为它,但我不确定是否可以从不同的线程发回响应。我很想知道这个设计。为什么Web应用程序(Hub)应该通过SignalR与数据库层进行通信,并且不要使用Web服务或类似的东西。 –

回答

0

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

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