感谢所有的回复,我真的很感激并且学到了很多东西!我还了解到我有很多需要学习的东西,而且还会出版。
我仍然试图摆脱等待和异步,所以我一直在搞乱,但我现在很难过。我做了大量的谷歌搜索,阅读和研究,但我找不到问题。
所以我正在做的是反序列化并尝试返回一个对象
public static async Task<SomeObject> Deserialize(string filePath)
{
var task = Task.Factory.StartNew(() => LoadFile(filePath));
await task;
return task.Result;
}
然后在这里调用上面的方法:
public async Task DoStuff()
{
var load = await Helper.Deserialize(Helper.filePath);
try
{
Console.WriteLine(load.GetType());
}
catch(Exception e)
{
Console.WriteLine(e);
}
}
其余代码在任务完成之前运行,并且对象总是以null形式出现,使其无效。我知道我做错了什么但是我不能,在我的生活中,即使在花了几个小时阅读已回答的问题和微软文档之后,我也不知道它是什么。
@Fabio这是LoadFile方法:
private static SomeObject LoadFile(string path)
{
JsonSerializer json = new JsonSerializer();
JsonTextReader reader = new JsonTextReader(new StreamReader(path));
var obj = json.Deserialize(reader, typeof(SomeObject));
reader.Close();
return (SomeObject)obj;
}
答案 0 :(得分:2)
试试这个
public static Task<SomeObject> Deserialize(string filePath)
{
var task = Task.Run(() => LoadFile(filePath));
return task;
}
答案 1 :(得分:1)
您应该使用Task.Run
代替Task.Factory.StartNew
public static Task<SomeObject> DeserializeAsync(string filePath)
{
return Task.Run(() => LoadFile(filePath));
}
假设LoadFile
返回SomeObject
或者您可以重构LoadFile
方法
private static Task<SomeObject> LoadFileAsync(string path) {
return Task.Run(() => {
JsonSerializer json = new JsonSerializer();
using(var reader = new JsonTextReader(new StreamReader(path))) {
var obj = json.Deserialize(reader, typeof(SomeObject));
return (SomeObject)obj;
}
});
}
public static async Task<SomeObject> DeserializeAsync(string filePath)
{
var obj = await LoadFileAsync(filePath);
return obj;
}