7

我有一个静态方法,我在其中调用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# 不会等待过程完全完成。

你对解决我的问题有什么建议吗?

4

1 回答 1

14

该方法的事实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要容易得多)。

于 2012-11-26T17:22:19.153 回答