public static async Task TestCache()
        {
            var u1 = new WaitingUser()
            {
                map_id = 1, rank = 1,
            };
            var u2 = new WaitingUser()
            {
                map_id = 1, rank = 1,
            };
            var u3 = new WaitingUser()
            {
                map_id = 1, rank = 1,
            };
            var u4 = new WaitingUser()
            {
                map_id = 1, rank = 1,
            };
            var u5 = new WaitingUser()
            {
                map_id = 1, rank = 1,
            };

            await WaitingList.AddWaitingUser(u1, 1);

            await Task.Delay(10 * 1000);

            await WaitingList.AddWaitingUser(u2, 2);

            await WaitingList.AddWaitingUser(u3, 3);

            await WaitingList.AddWaitingUser(u4, 4);

            await WaitingList.AddWaitingUser(u5, 4);

            var ret1 = await WaitingList.GetWaitingUser(1, 1, 3);


            var ret2 = await WaitingList.GetWaitingUser(1, 1, 3);


            var ret3 = await WaitingList.RemoveWaitingUser(3);

            await WaitingList.RemoveWaitingUser(1, 1, 2);
        }
        public static async Task <(MatchResult, bool)> SearchPlayer(Session session, long match_id, JMapData map_data, JGameModeData game_mode)
        {
            bool result      = false;
            var  matchResult = new MatchResult(match_id, session.map_id);

            if (GetStartPlayerCount(game_mode) <= 1)
            {
                return(matchResult, true);
            }

            Session other_session = null;
            var     seq           = new RankSequencer()
            {
                rank = session.rank, min_rank = session.min_rank, max_rank = session.max_rank
            };

            foreach (var rank in seq)
            {
                var users = await WaitingList.GetWaitingUser(session.map_id, rank, defaultGetWaitingUser);

                for (int i = 0; i < users.Count; ++i)
                {
                    //Log.Information($"searching... waiting user : {users[i]}, rank : {rank}");

                    // 자신은 스킵
                    if (users[i] == session.user_no)
                    {
                        continue;
                    }

                    if ((other_session = await Session.GetSession(users[i], false)) == null // 대기중 유저 세션 만료
                        )
                    {
                        Log.Information("cannot find Session {0}", users[i]);
                        await WaitingList.RemoveWaitingUser(users[i]);

                        continue;
                    }

                    if (other_session.rank != rank)
                    {
                        continue;
                    }

                    if (await MatchUser.OccupyMatchUser(users[i], match_id) == false)
                    {
                        continue;
                    }

                    if (await matchResult.AddPlayer(other_session, map_data, game_mode) == false)
                    {
                        Log.Error($"SearchPlayer error user_no:{session.user_no}");
                        continue;
                    }

                    Log.Information($"Candidate User {other_session.user_no}");

                    if (matchResult.replyToBattleServer.players.Count == GetStartPlayerCount(game_mode) - 1)
                    {
                        result = true;
                        return(matchResult, result);
                    }
                }
            }

            return(matchResult, result);
        }