在 SignalR 中,Hub.Context 线程是安全的

本文关键字:线程 安全 Context Hub SignalR | 更新日期: 2023-09-27 18:31:29

如果有多个请求同时来自不同的客户端发生,则在处理程序执行期间,Hub.Context.ConnectionId 的值会发生变化。

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

我应该复制 Hub.Context 吗?我应该在什么时候执行此操作?

在 SignalR 中,Hub.Context 线程是安全的

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

它们是按调用创建的。因此,来自客户端的每次调用都将创建一个新的中心实例和中心上下文。

这并不能直接回答您的问题,但我通常的工作流程是在呼叫者首次连接时在他们身上设置一个值,这可能会完成您需要的?

Caller.clientId = Guid.NewGuid();