在我的本地盒子上,以下代码有效:
public async Task<GameStatistic> LoadReport()
{
var folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(FolderName, CreationCollisionOption.OpenIfExists);
var file = await folder.GetFileAsync(FileName);
GameStatistic returnValue;
using (var inStream = await file.OpenSequentialReadAsync())
{
var serializer = new DataContractJsonSerializer(typeof (GameStatistic));
returnValue = serializer.ReadObject(inStream.AsStreamForRead()) as GameStatistic;
}
return returnValue;
}
调用上述方法的代码:
public GameStatistic GetReportData()
{
var repo = new GameRepository();
var gameStatTask = repo.LoadReport(); //(awaitable) Task<GameStatistic>
gameStatTask.Wait(); //this seems to make no difference
return gameStatTask.Result;
}
但是当我将代码转移到我的 Surface Pro 并运行应用程序(没有调试器)时,folder.GetFileAsync(FileName)
失败是因为获取文件夹的异步调用尚未返回。
当我在我的 Surface Pro 上调试应用程序(通过远程机器)并慢慢地让调试器经过第一行代码并等待几秒钟,然后再一步,一切正常。
我不喜欢尝试让线程休眠任意时间的想法,但我不确定我还能在这里做什么。
有什么我做错了,或者我应该做的事情我根本没有做吗?是否有一种常见的做法会真正等到 CreateFolderAsync 返回,以便在我调用 folder.GetFileAsync 时可以确定前一行是完整的?
感谢您提供的任何帮助。