【问题标题】:Changing Sync call to Async将同步调用更改为异步
【发布时间】:2015-02-04 18:55:09
【问题描述】:

我在库 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");
    }
}

【问题讨论】:

  • 我建议在调用代码中使用Task.Run。不要试图在你的库代码中伪造异步行为。

标签: c# .net task-parallel-library async-await task


【解决方案1】:

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

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

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

您基本上在做的是异步处理同步代码块。

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多