使所有控制器方法异步容易的方法



我有一个web api与控制器方法是这样的:

public HttpResponseMessage DoSmth() {
doingSmth();
}

我读过关于服务器线程如何在这里:为什么我应该返回Task在控制器中?这里:https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/october/async-programming-introduction-to-async-await-on-asp-net#synchronous-vs-asynchronous-request-handling

业务数据访问层的实现是同步的(并且巨大)),并且没有时间将所有内容重构为async task<>。是否有某种方法可以只重构控制器,即"topmost"?方法是异步的,所以服务器不会耗尽线程?

是否有办法只重构控制器,即"topmost"方法是异步的,所以服务器不会耗尽线程?

你可以这样想:同步调用阻塞线程。只要你的业务逻辑/DAL方法是同步的,它们就会阻塞线程。

正如一些人在评论中指出的那样,Task.Run将允许这些方法阻塞线程池线程而不是调用线程,这对许多GUI应用程序来说是一个很好的方法(阻塞线程池线程而不是GUI线程),但它在服务器应用程序上是适得其反的(阻塞一个线程池线程而不是另一个线程池线程)。

我建议首先分析你的应用程序,确定哪些请求是最慢的或最频繁调用的,并将其更改为async。在创建同步方法的异步等效时,可以使用标志参数hack (attribution: me)来避免逻辑/DAL类型中的代码重复。

相关内容

  • 没有找到相关文章

最新更新