我在库 Helper.dll 中有以下代码。该程序集包含一个名为 Products.XML 的嵌入式XML文件。方法GetProducts
运行正常。但它需要几秒钟才能响应,因为它是同步的。我想在这个加载操作进行时释放UI。
没有异步调用可用于 LINQ to XML 操作,例如XDocument.Load
,因此我无法在此使用async
和await
。
感谢任何答案。
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");
}
}
答案 0 :(得分:3)
如果您在该方法中没有任何异步操作,请不要更改它并保持同步。
当您从UI线程调用它时,使用Task.Run
将同步工作卸载到另一个线程并await
返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
你基本上做的是异步处理同步代码块。