在SignalR中Hub.Context线程安全吗?

如果同时从不同客户端发生多个请求,则Hub.Context.ConnectionId的值在执行处理程序期间发生更改。

假设我有2个客户端与客户端ID A和B连接,我在我的Hub上有一个名为foo()的方法。 我从A向服务器发送请求调用foo(),然后在处理来自A的请求时,我从B调用foo()发送请求。 在处理A的请求开始时Hub.Context.ConnectionId == A但在方法结束时调用Hub.Context.ConnectionId == B.

我应该复制Hub.Context吗? 我应该在什么时候这样做?

它不需要是线程安全的,因为Hub实例不是静态的,因此您不需要复制任何东西。

它们是按呼叫创建的。 因此,来自客户端的每个调用都将创建一个新的Hub实例和HubContext。

这并没有直接回答你的问题,但我通常的工作流程是在他们第一次连接时在呼叫者上设置一个值,这可能会满足你的需求吗?

Caller.clientId = Guid.NewGuid();