我目前在我的集线器类中有以下代码:
public class MatchMaker : Hub
{
private List<SoloUser> soloUsers = new List<SoloUser>();
//Client Requests
public void findNewPartner(string Country, string State)
{
SoloUser soloUser = soloUsers.FirstOrDefault(s => (s.Country== Country) && (s.State == State));
if (soloUsers.Count > 0)
Clients.partnerRequestResult(soloUsers.FirstOrDefault());
else
{
soloUser = new SoloUser {
Major = Major,
School = School,
SessionId = SessionId,
Token = token
};
soloUsers.Add(soloUser);
}
}
}
问题是每当我在客户端调用此方法时,向我的soloUsers
集合添加SoloUser对象不会保存,因此当另一个用户再次调用此函数时,linq语句(soloUsers.FirstOrDefault(s => (s.School == School) && (s.Major == Major))
)永远不会找到SoloUser。我怎样才能使我的soloUsers
集合保存实例和添加到它的对象?
答案 0 :(得分:6)
SignalR为您进行的每次通话创建一个新的集线器实例(这是非常轻量级的,不用担心),因此您的soloUsers列表不会在调用之间保持不变。
使列表静态以解决此问题。请注意,在访问列表时需要某种锁定,或者使用concurrent collections之一来使其保证线程安全。