2017-01-11 5 views
3

私はC#で書かれたHubからイベントを購読するSignalRクライアントアプリケーションを用意しています。イベントが「起動」されると、アプリケーションはメソッドを実行します。C#クライアントで複数のイベントを同時に処理する方法

問題は、その種類のすべてのイベントが、そのクライアントに順次処理されることです。

ユースケース/フロー:ブラウザで

  1. は、ユーザーがボタンは、特定のメッセージを送信SignalRハブ
  2. SignalRハブへの呼び出しをトリガー
  3. ボタンをクリックしますSignalRクライアント
  4. SignalR Clientはイベント/メッセージを受信します
  5. SignalR Clientはメッセージをデータベースに格納するメソッドを呼び出します
  6. SignalRクライアントが結果を返すようにハブ内のメソッドを呼び出す
  7. ハブ別のユーザが同時にボタンをクリックすると、SignalRクライアントのみ格納する結果をユーザに

を提供一度に1つのメッセージ。

クライアント例:

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

こんにちは@Hackerman。質問が更新されました。あなたは見てみることができますか? –

+0

これは 'Task.Run'を使うのが可能かもしれませんが、別のスレッドから応答を返すことができるかどうかはわかりません。そして私はそのデザインについて疑問に思います。 Webアプリケーション(Hub)がSignalRによってデータベースレイヤーと通信する必要があり、Webサービスなどを使用しないのはなぜですか。 –

答えて

0

これは、Async/Awaitを使用して解決できます。 Async関数は、結果をHubに返信する責任があります。

myHub.On<ExecuteRequestModel, string>("Execute", async (request, to) => 
    await onExecute(request, to) 
); 
関連する問題