Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将同步调用更改为异步_C#_.net_Task Parallel Library_Async Await_Task - Fatal编程技术网

C# 将同步调用更改为异步

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

我在library Helper.dll中有以下代码。此程序集有一个名为Products.XML的嵌入式XML文件。方法
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
。不要试图在库代码中伪造异步行为。