async/await 在另一个线程上有什么优势吗?

Is there any advantage to async/await on another thread?

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

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

更新

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

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

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

没有任何关系

在您的用例中,您有兴趣保持 UI 响应,但是有一个 API 混合了 I/O 和 CPU 方法。在这种情况下,使用 Task.Run 来调用那些 API 方法是完全合适的。