2017-01-11 97 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) 
);