我尝试在我的程序中实现保存/打开功能,我正在尝试对我必须保存的内容进行序列化,以便在用户需要使用反序列化时能够轻松加载它。 Newtonsoft是首选的图书馆。
问题是文件最终可能非常大,因此必须异步反序列化。
我序列化和反序列化的是类Validation
这就是我想要做的事情:
public async static Task<Validation> CreateFromSaveFile(Validator Outer, string FileName)
{
StreamReader SR = new StreamReader(FileName);
JsonTextReader JR = new JsonTextReader(SR);
var Serializer = new JsonSerializer();
Console.WriteLine("1");
var task = Task.Factory.StartNew(() => Serializer.Deserialize<Validation>(JR));
Validation Res = await task;
Console.WriteLine("2");
JR.Close();
SR.Close();
return Res;
}
现在:1打印,2打不打印。它被卡住等待任务。我知道它应该工作,因为同步运行相同的代码会做它应该的,并且工作得很好。 显然,我没有得到关于async / await编程如何工作以及应该如何使用它的内容。
有人有什么想法吗?
编辑:我被要求发布调用此代码的代码。我们走了: public async Task<Validation> GetStartingValidation(Menu Outer)
{
Validation Res = await Validation.CreateFromSaveFile(this, @"Some\Path.txt").Result;
Console.WriteLine("Done");
return Res;
}
答案 0 :(得分:0)
使用 async 关键字声明的方法同步运行,直到遇到 await 。一旦发生这种情况,控制权将返回给异步方法的调用者。一旦完成等待关键字的调用,控制就会返回到异步方法。
在你的情况下,这意味着&#34; 2&#34;在反序列化完成之前不会打印。