У меня есть клиентское приложение SignalR, написанное на C#, которое подписывается на событие из концентратора. Когда событие «запускается», приложение выполняет метод.
Вопрос в том, что все события такого рода, этому клиенту, обрабатываются последовательно.
Сценарий использования/процесс:
- В браузере пользователь нажимает кнопку
- Кнопка инициирует вызов концентратора SignalR.
- Концентратор SignalR отправляет сообщение определенному клиенту SignalR.
- Клиент SignalR получает событие/сообщение
- Клиент SignalR вызывает метод, который сохранит сообщение в базе данных.
- Клиент SignalR вызывает метод в концентраторе для возврата результата.
- Хаб доставляет пользователю результат
Если другой пользователь одновременно нажимает кнопку, клиент 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("...");
});
Есть ли рекомендуемая практика для одновременной обработки нескольких событий?
Task.Run
, но я не уверен, сможете ли вы отправить ответ из другого потока. А меня интересует дизайн. Почему веб-приложение (концентратор) должно связываться с уровнем базы данных с помощью SignalR и не использовать веб-службу или что-то в этом роде. - person H.G. Sandhagen   schedule 11.01.2017