【问题标题】:Is there any advantage to async/await on another thread?在另一个线程上异步/等待有什么好处吗?
【发布时间】:2015-03-06 14:22:42
【问题描述】:

我有一个 WPF 客户端,它使用提供异步 API 支持的外部库,但在使用所述异步方法(例如实体实现、解析等)。使用异步方法有什么好处,因为我希望 CPU 绑定在另一个线程上工作?不使用 Task.Run() 调用这些方法会导致一些动画抖动,因为 CPU 绑定的工作仍在消息循环中的调度程序上发生,但如果 API 提供异步支持,我更喜欢使用它而不是同步代码。

我认为使用异步 API 的好处如果它可以重用Task.Run() 提供的我的线程池线程。我认为这是 ASP.NET 中 async/await 的主要好处之一,所以我假设线程池线程的重用对客户端也是一个好处。

更新

更新了问题以陈述斯蒂芬指出的 CPU 绑定工作。我可以看到通过我的服务使用外部库的异步 API 的另一个优势,即使我将它包装在 ViewModel 中的 Task.Run() 中。也就是说,我的服务的任何其他调用者都将免费获得异步,而无需当时更改实现或制作单独的服务。

【问题讨论】:

  • 对于反对者,是因为我没有添加代码还是因为您认为这个问题不合适?我不明白要否决一个诚实的问题。

标签: c# .net multithreading asynchronous async-await


【解决方案1】:

我假设你的意思是 CPU-bound,而不是 I/O-bound。

Task.Run使用线程池线程,可以复用。这与async 或 ASP.NET 无关。

在您的用例中,您希望保持 UI 响应式,但有一个 API 具有混合 I/O 和 CPU 方法。在这种情况下,使用Task.Run 调用这些API 方法是非常合适的。

【讨论】:

  • 感谢您回答问题。我看不到其他人在哪里问过这个特定问题,所以非常感谢您的意见。
猜你喜欢
  • 2020-10-24
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2020-07-08
  • 2015-09-27
  • 1970-01-01
相关资源
最近更新 更多