2012-04-16 9 views
8

Se è presente più di una richiesta proveniente da client diversi contemporaneamente, il valore di Hub.Context.ConnectionId cambia durante l'esecuzione del gestore.In SignalR is Hub.Context thread safe?

Dire che ho 2 client connessi con gli ID dei clienti A e B, e ho un metodo sul mio hub chiamato foo(). Invio una richiesta da A al Server invocando foo(), quindi mentre la richiesta da A è in fase di elaborazione, invio una richiesta da B invocando foo(). All'inizio dell'elaborazione della richiesta A, Hub.Context.ConnectionId == A, ma alla fine del metodo chiama Hub.Context.ConnectionId == B.

Dovrei copiare Hub.Context? A che punto dovrei farlo?

risposta

7

Non è necessario essere thread-safe poiché le istanze di Hub non sono statiche quindi non è necessario copiare nulla.

Vengono creati per chiamata. Quindi ogni chiamata dal client creerà una nuova istanza di Hub e HubContext.

+0

Vedo grazie, stavo restituendo lo stesso Hub dall'Iububtivatore, ora l'ho modificato per restituire un nuovo Hub ogni volta. –

0

Questo non risponde direttamente alla tua domanda, ma il mio solito flusso di lavoro è quello di impostare un valore sul chiamante quando si connettono per primo, il che può portare a termine ciò che ti serve?