将同步调用更改为异步

Changing Sync call to Async

我在库中有以下代码 Helper.dll。该程序集有一个名为 Products.XML 的嵌入式 XML 文件。 GetProducts 方法工作正常。但它需要几秒钟才能响应,因为它是同步的。我想在加载操作进行时释放 UI。

没有异步调用可用于 LINQ to XML 操作,如 XDocument.Load,所以我不能使用 asyncawait这里。

感谢任何回答。

public static class LookupUtil
{
    public static IEnumerable<XElement> GetProducts()
    {
        var stream = Assembly.
            GetExecutingAssembly().
            GetManifestResourceStream("Helper.Products.XML");
        var reader = new XmlTextReader(stream);
        var document = XDocument.Load(reader);

        return document.Descendants("Products");
    }
}

如果您在该方法中没有任何异步操作,请不要更改它并保持同步

当您从 UI 线程调用它时使用 Task.Run 将同步工作卸载到不同的线程和 await 返回的任务:

var elements = await Task.Run(() => LookupUtil.GetProducts());

您基本上是在异步处理一段同步代码。