parse.com查询在mono下抛出栈溢出异常
parse.com query throws stack overflow exception under mono
我正在构建一个简单的 C# mono 应用程序,它从 parse.com 服务器查询数据。
没什么特别的:
private static async Task<ParseGameData> DownloadGameData(DateTime dateFrom)
{
ParseGameData gameData = new ParseGameData();
InitParse();
var qHits = ParseObject.GetQuery("Hits").WhereGreaterThan("createdAt", dateFrom)
.Limit(100).OrderBy("createdAt");
gameData.hits = await qHits.FindAsync();
return gameData;
}
并从另一个函数调用:
ParseGameData gameData = DownloadGameData(timestamp).Result;
这很好用,查询少量(~少于 75 条记录)时不会抛出异常。但是,如果我将限制设置得更高,应用程序就会崩溃,我会得到:
Unhandled Exception:
System.WhosebugException: The requested operation caused a stack overflow.
at System.Threading.Tasks.Task.FinishContinuations () [0x00000] in <filename unknown>:0
at System.Threading.Tasks.Task.FinishStageThree () [0x00000] in <filename unknown>:0
at System.Threading.Tasks.Task`1[System.Threading.Tasks.TaskExtensions+VoidResult].TrySetResult (VoidResult result) [0x00000] in <filename unknown>:0
at System.Threading.Tasks.UnwrapPromise`1[System.Threading.Tasks.TaskExtensions+VoidResult].TrySetFromTask (System.Threading.Tasks.Task task, Boolean lookForOce) [0x00000] in <filename unknown>:0
at System.Threading.Tasks.UnwrapPromise`1[System.Threading.Tasks.TaskExtensions+VoidResult].InvokeCore (System.Threading.Tasks.Task completingTask) [0x00000] in <filename unknown>:0
at System.Threading.Tasks.UnwrapPromise`1[System.Threading.Tasks.TaskExtensions+VoidResult].Invoke (System.Threading.Tasks.Task completingTask) [0x00000] in <filename unknown>:0
...然后重复这些行。
出于兴趣目的:数据库中的每条记录大约需要 65KB,因此 100 次匹配将是 6.5MB。
我已经在 OS X 和 Linux 两个单声道平台上尝试过此代码。两个平台都抛出 Whosebug 异常。但是在 Windows 上,使用 .NET,它工作正常,即使有 1000 个限制。这让我相信它与单声道和 parse.com 库有关。有什么建议吗?
这似乎是一个解析库错误。我已将解析库从 1.5.5 降级到 1.5.4,现在它工作正常。
我正在构建一个简单的 C# mono 应用程序,它从 parse.com 服务器查询数据。
没什么特别的:
private static async Task<ParseGameData> DownloadGameData(DateTime dateFrom)
{
ParseGameData gameData = new ParseGameData();
InitParse();
var qHits = ParseObject.GetQuery("Hits").WhereGreaterThan("createdAt", dateFrom)
.Limit(100).OrderBy("createdAt");
gameData.hits = await qHits.FindAsync();
return gameData;
}
并从另一个函数调用:
ParseGameData gameData = DownloadGameData(timestamp).Result;
这很好用,查询少量(~少于 75 条记录)时不会抛出异常。但是,如果我将限制设置得更高,应用程序就会崩溃,我会得到:
Unhandled Exception:
System.WhosebugException: The requested operation caused a stack overflow.
at System.Threading.Tasks.Task.FinishContinuations () [0x00000] in <filename unknown>:0
at System.Threading.Tasks.Task.FinishStageThree () [0x00000] in <filename unknown>:0
at System.Threading.Tasks.Task`1[System.Threading.Tasks.TaskExtensions+VoidResult].TrySetResult (VoidResult result) [0x00000] in <filename unknown>:0
at System.Threading.Tasks.UnwrapPromise`1[System.Threading.Tasks.TaskExtensions+VoidResult].TrySetFromTask (System.Threading.Tasks.Task task, Boolean lookForOce) [0x00000] in <filename unknown>:0
at System.Threading.Tasks.UnwrapPromise`1[System.Threading.Tasks.TaskExtensions+VoidResult].InvokeCore (System.Threading.Tasks.Task completingTask) [0x00000] in <filename unknown>:0
at System.Threading.Tasks.UnwrapPromise`1[System.Threading.Tasks.TaskExtensions+VoidResult].Invoke (System.Threading.Tasks.Task completingTask) [0x00000] in <filename unknown>:0
...然后重复这些行。
出于兴趣目的:数据库中的每条记录大约需要 65KB,因此 100 次匹配将是 6.5MB。
我已经在 OS X 和 Linux 两个单声道平台上尝试过此代码。两个平台都抛出 Whosebug 异常。但是在 Windows 上,使用 .NET,它工作正常,即使有 1000 个限制。这让我相信它与单声道和 parse.com 库有关。有什么建议吗?
这似乎是一个解析库错误。我已将解析库从 1.5.5 降级到 1.5.4,现在它工作正常。