在静态方法中使用异步函数

Mah*_*hdi 5 c# asynchronous async-await

我有一个静态方法,在其中我调用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(...)
} 
Run Code Online (Sandbox Code Playgroud)

如您所知,LoadTenWord是静态的,不能是异步方法,因此我使用Result属性调用LoadDocument.当我运行我的应用程序时,应用程序不起作用,但是当我调试它并且我在下面的行中等待

XDocument xDoc = xmlHelper.LoadDocument().Result;
Run Code Online (Sandbox Code Playgroud)

一切都好!!!我认为,没有await关键字,C#不会等待完全完成的过程.

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

Ser*_*rvy 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());
}
Run Code Online (Sandbox Code Playgroud)

使用Result方法阻塞结果直到任务完成.在您的环境中,这是一个问题; 你需要阻止,但仅仅await任务(或使用延续到处理结果,但是await容易).