等待反序列化任务永远不会结束c#

时间:2018-03-21 17:21:59

标签: c# json asynchronous json.net task

我尝试在我的程序中实现保存/打开功能,我正在尝试对我必须保存的内容进行序列化,以便在用户需要使用反序列化时能够轻松加载它。 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;
        }

1 个答案:

答案 0 :(得分:0)

使用 async 关键字声明的方法同步运行,直到遇到 await 。一旦发生这种情况,控制权将返回给异步方法的调用者。一旦完成等待关键字的调用,控制就会返回到异步方法。

在你的情况下,这意味着&#34; 2&#34;在反序列化完成之前不会打印。