In SignalR is Hub.Context thread safe?

2019-02-17 00:47发布

问题:

If there is more than one request occurring from different clients simultaneously then the value of Hub.Context.ConnectionId changes during the execution of the handler.

Say I've got 2 clients connected with client Ids A and B, and I've got a method on my Hub called foo(). I send a request from A to the Server invoking foo(), then whilst the request from A is being processed I send a request from B invoking foo(). At the start of the processing of A's request Hub.Context.ConnectionId == A but at the end of the method call Hub.Context.ConnectionId == B.

Should I be copying the Hub.Context? At what point should I do this?

回答1:

It doesn't need to be thread safe since Hub instances aren't static so you don't need to copy anything.

They are created per call. So each call from the client will create a new Hub instance and HubContext.



回答2:

This doesn't directly answer your question, but my usual workflow is to set a value on the caller when they first connect, which may accomplish what you need?

Caller.clientId = Guid.NewGuid();