In SignalR is Hub.Context thread safe?

2019-02-17 00:34发布

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?

2条回答
欢心
2楼-- · 2019-02-17 00:46

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.

查看更多
成全新的幸福
3楼-- · 2019-02-17 00:48

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();
查看更多
登录 后发表回答