Вопрос по c# – В SignalR безопасен ли поток Hub.Context?

8

Если от разных клиентов одновременно происходит более одного запроса, то значение Hub.Context.ConnectionId изменяется во время выполнения обработчика.

Скажем, у меня есть 2 клиента, связанных с клиентскими идентификаторами A и B, и у меня есть метод на моем хабе, называемый foo (). Я отправляю запрос от A на сервер, вызывая foo (), затем, пока запрос от A обрабатывается, я отправляю запрос от B, вызывая foo (). В начале обработки запроса A Hub.Context.ConnectionId == A, но в конце вызова метода Hub.Context.ConnectionId == B.

Должен ли я копировать Hub.Context? В какой момент я должен это сделать?

Ваш Ответ

2   ответа
0

Это не дает прямого ответа на ваш вопрос, но мой обычный рабочий процесс заключается в установке значения для вызывающего абонента при первом подключении, что может выполнить то, что вам нужно?

Caller.clientId = Guid.NewGuid();
7

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

Они создаются за звонок. Таким образом, каждый вызов от клиента будет создавать новый экземпляр Hub и HubContext.

Я вижу спасибо, я возвращал тот же Hub от IHubActivator, я теперь изменил его, чтобы каждый раз возвращать новый Hub. Daniel James Bryars

Похожие вопросы