我正在构建一个简单的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.StackOverflowException: 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上的两个单声道平台上尝试了这个代码。两个平台都抛出stackoverflow异常。但是在Windows上,使用.NET,它工作正常,即使有1000限制。这让我相信它是mono和parse.com库的东西。有什么建议吗?
答案 0 :(得分:1)
这似乎是一个解析库错误。我已经将解析lib从1.5.5降级到1.5.4,现在它工作正常。