我已经实现了一个 ASP.Core SignalR 应用程序。
一个共享集线器类每 10 秒从类中调用一个信号给它的所有客户端SharedHub(这个类不是从它继承的,Hub它有IHubContext调用的逻辑)
public void Tick(){
var time = _context.table.time;
invoke('tick', time.tick);
}
同样在同一个类中,一旦建立了新连接,就会调用一个方法来更新数据库
public void UpdateSocketConnection(int connectionId){
var connection =_context.connection;
connection.id = connectionId;
_context.saveChanges();
}
这个实现的问题是,如果连接当前正在调用Tick()方法并且同时连接了一个客户端。_context抛出一个错误说:
_context 正在使用中。
(我将在重现后更新确切的错误消息)。
我做了什么 ?
_context我已经实现了一个工厂方法来获取每个方法之上的新实例
public void Tick(){
var time = factory.GetContext().time;
invoke('tick', time.tick);
}
public void UpdateSocketConnection(int connectionId){
var context = Factory.getContext();
var connection =context.connection;
connection.id = connectionId;
context .saveChanges();
}
这实际上解决了问题。但这似乎不是正确的做法。我不确定每次在每种方法之上获取新上下文时的性能。这似乎是不好的做法。
我想知道这种情况的可能实现方式是什么。
守着星空守着你
相关分类