在具有单个后端调用的控制器方法上使用任务是否明智?

Is it smart to use tasks on controller methods having a single backend call?

在 Controller 方法 上使用 Task 有什么好处吗 单个后端调用?

(例如:来自 SQL 服务器的简单 select)如下所示

public Task<string> Get(int id)
{
    return Task.Run(() =>
    {
       return SimpleSelectFromDB();
    });
 }

而不是(同步)

 public string Get(int id)
 {
    return SimpleSelectFromDB();
 }

在服务器端代码中使用 Task.Run() 几乎没有任何优势。

您所做的只是离开一个线程池线程并转到另一个线程。

相反,您应该更改后端调用以使用非阻塞 IO 并 await 直接使用它。

Is there any advantage of using Task on Controller method having a single backend call?

让我们从在 ASP.NET is dangerous. It can cause offloaded work to be terminated once an IIS recycle kicks in. If you want to offload to a background thread, use either HostingEnvironment.QueueBackgroundWorkItem or AspNetBackgroundTasks 中调用 Task.Run 来注册他们的工作开始。

在您当前的示例中,您正在执行自然异步的工作,例如调用对数据库的调用。不需要线程池线程来执行此操作,您可以使用自然异步 API,例如 Entity Framework(从 V6 及更高版本开始)等数据库提供程序提供的那些并利用它们。这些异步 API 现在以 API 的形式出现,即 return 一个 Task 或一个 Task<T>,它符合 TAP(任务异步模式)与 async-await.

配合得很好