2017-01-11 9 views
3

У меня есть клиентское приложение SignalR, написанное на C#, которое подписывает событие от концентратора. Когда событие «уволено», приложение выполняет метод.Как обрабатывать несколько событий одновременно в C#-клиенте

Вопрос в том, что все события такого рода, для этого клиента, обрабатываются последовательно.

Use Case/Flow:

  1. В браузере, пользователь нажимает кнопку
  2. Кнопка запускает вызов на SignalR Hub
  3. The SignalR Hub отправить сообщение конкретного Клиент SignalR
  4. Клиент SignalR принимает событие/сообщение
  5. Клиент SignalR вызывается метод, который будет хранить сообщение в базе данных
  6. SignalR Клиент вызывает метод в хаб для возврата результата
  7. Концентратор доставить пользователю результата

Если другой пользователь нажимает на кнопку, в то же время, SignalR Клиент будет только магазин по одному сообщению за раз.

Client Пример:

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

Привет @Хакерман. Вопрос обновлен. Не могли бы вы взглянуть? –

+0

Возможно, для этого можно использовать 'Task.Run', но я не уверен, можете ли вы отправить ответ назад из другого потока. И мне интересно о дизайне. Почему веб-приложение (концентратор) связывается с уровнем базы данных SignalR и не использует веб-службу или что-то в этом роде. –

ответ

0

Это можно решить, используя Async/Await. Функция Async будет отвечать за ответ на результат Hub.

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

 Смежные вопросы

  • Нет связанных вопросов^_^