C# 将同步调用更改为异步
我在library Helper.dll中有以下代码。此程序集有一个名为Products.XML的嵌入式XML文件。方法C# 将同步调用更改为异步,c#,.net,task-parallel-library,async-await,task,C#,.net,Task Parallel Library,Async Await,Task,我在library Helper.dll中有以下代码。此程序集有一个名为Products.XML的嵌入式XML文件。方法GetProducts运行良好。但由于它是同步的,所以需要几秒钟的时间来响应。我想在加载操作进行时释放UI 像XDocument.Load这样的LINQ to XML操作没有异步调用,因此我不能在这里使用async和wait 谢谢你的回答 public static class LookupUtil { public static IEnumerable<XEle
GetProducts
运行良好。但由于它是同步的,所以需要几秒钟的时间来响应。我想在加载操作进行时释放UI
像XDocument.Load
这样的LINQ to XML操作没有异步调用,因此我不能在这里使用async
和wait
谢谢你的回答
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");
}
}
公共静态类LookupUtil
{
公共静态IEnumerable GetProducts()
{
var stream=Assembly。
GetExecutionGassembly()。
GetManifestResourceStream(“Helper.Products.XML”);
var reader=新的XmlTextReader(流);
var document=XDocument.Load(读卡器);
返回文件。子体(“产品”);
}
}
如果该方法中没有任何异步操作,请不要更改它,并保持同步
使用Task。从UI线程调用时运行,将同步工作卸载到不同的线程,并等待返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
基本上,您所做的是异步处理一块同步代码。如果该方法中没有任何异步操作,请不要更改它,并保持它的同步
使用Task。从UI线程调用时运行,将同步工作卸载到不同的线程,并等待返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
基本上,您所做的是异步处理一块同步代码。如果该方法中没有任何异步操作,请不要更改它,并保持它的同步
使用Task。从UI线程调用时运行,将同步工作卸载到不同的线程,并等待返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
基本上,您所做的是异步处理一块同步代码。如果该方法中没有任何异步操作,请不要更改它,并保持它的同步
使用Task。从UI线程调用时运行,将同步工作卸载到不同的线程,并等待返回的任务:
var elements = await Task.Run(() => LookupUtil.GetProducts());
基本上,您所做的是异步处理同步代码块。我建议使用Task。在调用代码中运行。不要试图在库代码中伪造异步行为。我建议在调用代码中使用Task.Run
。不要试图在库代码中伪造异步行为。我建议在调用代码中使用Task.Run
。不要试图在库代码中伪造异步行为。我建议在调用代码中使用Task.Run
。不要试图在库代码中伪造异步行为。