为什么 ParseQuery.FindAsync 在 .NET API 中返回缓存的结果

本文关键字:返回 缓存 结果 API ParseQuery FindAsync NET 为什么 | 更新日期: 2023-09-27 18:32:27

I'm use Parse.com .NET API. 我进行查询,然后调用 FindAsync() 方法。第一次调用从 Parse 返回数据,但第二次调用和其他调用返回旧数据,而是再次从 Parse 获取数据(!在.NET API中不存在像ParseQuery.CachePolicy这样的类,那么我该怎么做才能通过任何FindAsync调用从服务器获得真正的获取?

如果有帮助 - 我的查询:

            //Fetch user's scores from server (give me my old scores).
            var oldHighScoresQuery = ParseObject.GetQuery(HIGHSCORE_CLASS)
                .WhereEqualTo(USER_FIELD, currenUser)
                .WhereContainedIn(LANGUAGE_FIELD, requestLanguages)
                .WhereContainedIn(MODE_FIELD, requestModes);
            var oldHighScoreList = (await oldHighScoresQuery.FindAsync()).ToList();
//oldHighScoreList after second call contains cached data when server's data already updated.

为什么 ParseQuery.FindAsync 在 .NET API 中返回缓存的结果

最终我发布的错误被"分配"在这里:https://developers.facebook.com/bugs/311128795748745/所以我希望这将以某种方式得到解决。在此之前,我找到了一种解决方法 - 我使我的每个查询都保证唯一,并具有 %base_query% 等特殊约束。WhereNotEqual(SOME_FILED,UniqueValue),其中UniquerValue保证永远不会等于SOME_FIELD,所以缓存认为它是新的(未缓存的)查询并转到网络。

这是我的功能:

        private ParseQuery<ParseObject> MakeUniqueQueryOf_HIGHSCORE_CLASS(ParseQuery<ParseObject> query, string fieldNameThanNotEqualsRandomValue) {
            DateTime now = DateTime.Now;
            string randomValue = now.ToShortDateString() + now.ToLongTimeString();
            return query.WhereNotEqualTo(fieldNameThanNotEqualsRandomValue, randomValue);
        }

如果查询之间的时间保证超过 1 秒,如果需要更频繁的查询 - 添加毫秒或刻度,则适合这样做。这是我使用它的方式:

    //Fetch user's scores from server (give me my old scores).
    var oldHighScoresQuery = ParseObject.GetQuery(HIGHSCORE_CLASS)
        .WhereEqualTo(USER_FIELD, currenUser)
        .WhereContainedIn(LANGUAGE_FIELD, requestLanguages)
        .WhereContainedIn(MODE_FIELD, requestModes);
    oldHighScoresQuery = MakeUniqueQueryOf_HIGHSCORE_CLASS(oldHighScoresQuery, PLAYER_NAME_FIELD);
    var oldHighScoreList = (await oldHighScoresQuery.FindAsync()).ToList();
    //oldHighScoreList after second and others calls contains ACTUAL, NOT CACHED, JUST ACTUAL data.

希望这对我的情况有所帮助。