1

我的中心类目前有以下代码:

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);
        }



    }
}

问题是每当我在客户端调用此方法时,将 SoloUser 对象添加到我的soloUsers集合中不会保存,因此当另一个用户再次调用此函数时,linq statement( soloUsers.FirstOrDefault(s => (s.School == School) && (s.Major == Major))) 永远不会找到 SoloUser。我怎样才能做到这一点,以便我的soloUsers集合将保存实例和添加到其中的对象?

4

1 回答 1

6

SignalR 为您进行的每个呼叫创建一个新的集线器实例(这是非常轻量级的东西,不用担心),因此您的 soloUsers 列表不会在呼叫之间保留。

使列表静态以解决此问题。请注意,在访问列表或使用其中一个并发集合以使其线程安全时,这将需要某种锁定。

于 2012-07-23T07:19:05.850 回答