Dans SignalR, le thread Hub.Context est-il sécurisé?

S’il existe plusieurs demandes simultanées provenant de différents clients, la valeur de Hub.Context.ConnectionId change alors pendant l’exécution du gestionnaire.

Supposons que j’ai 2 clients connectés avec les identifiants client A et B, et que j’ai une méthode sur mon hub appelée foo (). J’envoie une demande de A au serveur en invoquant foo (), puis, pendant le traitement de la demande de A, j’envoie une demande de B en invoquant foo (). Au début du traitement de la demande de A, Hub.Context.ConnectionId == A mais à la fin de la méthode, appelez Hub.Context.ConnectionId == B.

Devrais-je copier le Hub.Context? À quel moment devrais-je faire cela?

Cela n’a pas besoin d’être thread-safe puisque les instances de hub ne sont pas statiques, vous n’avez donc pas besoin de copier quoi que ce soit.

Ils sont créés par appel. Ainsi, chaque appel du client créera une nouvelle instance Hub et HubContext.

Cela ne répond pas directement à votre question, mais mon stream de travail habituel consiste à définir une valeur sur l’appelant lorsqu’il se connecte pour la première fois, ce qui peut répondre à vos besoins.

Caller.clientId = Guid.NewGuid();