将同步调用更改为异步
Changing Sync call to Async
我在库中有以下代码 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");
}
}
如果您在该方法中没有任何异步操作,请不要更改它并保持同步。
当您从 UI 线程调用它时使用 Task.Run
将同步工作卸载到不同的线程和 await
返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
您基本上是在异步处理一段同步代码。
我在库中有以下代码 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");
}
}
如果您在该方法中没有任何异步操作,请不要更改它并保持同步。
当您从 UI 线程调用它时使用 Task.Run
将同步工作卸载到不同的线程和 await
返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
您基本上是在异步处理一段同步代码。