我有一个静态方法,其中我称之为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是静态的,不能是一个异步方法,所以我使用LoadDocument属性调用它。当我运行我的应用程序时,应用程序不工作,但是当我调试它时,我在下面一行中等待
XDocument xDoc = xmlHelper.LoadDocument().Result;一切都好!我认为是,没有await关键字,C#不会等待整个过程完成。
你对解决我的问题有什么建议吗?
发布于 2012-11-26 17:22:19
方法是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要容易得多)。
https://stackoverflow.com/questions/13569670
复制相似问题