gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:33:13 24 4
gpt4 key购买 nike

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

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

最佳答案

该方法是静态的事实意味着它不能被标记为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很多 更容易)。

关于c# - 在静态方法中使用异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com