我有一个静态方法,在其中我调用async
方法(xmlhelper.loaddocument())。我在setter部分的属性中调用这个方法
internal static IEnumerable<Word> LoadTenWords(int boxId)
{
XmlHelper xmlHelper = new XmlHelper();
XDocument xDoc = xmlHelper.LoadDocument().Result;
return xDoc.Root.Descendants("Word").Single(...)
}
如您所知,loadtenword是静态的,不能是异步方法,因此我使用result属性调用loaddocument。当我运行我的应用程序时,应用程序不工作,但当我调试它时,我会排队等待
XDocument xDoc = xmlHelper.LoadDocument().Result;
一切都好!!!我认为,如果没有
await
关键字,c不会等待进程完全完成。你有什么解决我问题的建议吗?
最佳答案
方法是static
并不意味着它不能标记为async
。
internal static async Task<IEnumerable<Word>> LoadTenWords(int boxId)
{
XmlHelper xmlHelper = new XmlHelper();
XDocument xDoc = await xmlHelper.LoadDocument();
return xDoc.Root.Descendants("Word").Select(element => new Word());
}
使用
Result
会导致方法阻塞,直到任务完成。在您的环境中,这是一个问题;您不需要阻塞任务,而只需要await
任务(或者使用continuation来处理结果,但是await
要容易得多)。