我有一个静态方法,我在其中调用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#不会等待该过程完成。
你对解决我的问题有什么建议吗?
答案 0 :(得分:12)
该方法为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
任务(或使用延续来处理结果,但await
更多更容易)。< / p>
答案 1 :(得分:-3)
internal static IEnumerable<Word> LoadTenWords(int boxId)
{
var task = new XmlHelper().LoadDocument();
task.Wait();
return from word in task.Result.Root.Descendants("Word")
}