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ステートメント(soloUsers.FirstOrDefault(s => (s.School == School) && (s.Major == Major)))がSoloUserを検出しないことです。soloUsersコレクションがインスタンスとそれに追加されたオブジェクトを保存するようにするにはどうすればよいですか?

4

1 に答える 1

6

SignalRは、呼び出しごとに新しいハブインスタンスを作成します(これは非常に軽量です。心配しないでください)。したがって、soloUsersリストは呼び出し間で保持されません。

これを解決するには、リストを静的にします。リストにアクセスするとき、または同時コレクションの1つを使用してスレッドセーフにする場合は、何らかのロックが必要になることに注意してください。

于 2012-07-23T07:19:05.850 に答える