返回任务的Web Api方法的缺点

时间:2014-09-04 10:57:14

标签: c# asp.net asp.net-web-api task taskfactory

为什么从Web Api方法返回Task<T>的做法不是默认值,而是在Visual Studio中创建新的Web Api控制器时获得的方法?

这样做有什么不利之处吗?

public class MyController : ApiController
{
    public Task<string> Boo()
    {
        return Task.Factory.StartNew(() =>
        {
            return "Boo";
        });
    }
}

2 个答案:

答案 0 :(得分:3)

  

这样做有什么不利之处吗?

是的,你没有充分的理由让你的代码不那么可读,更长,性能也更差。我没有看到任何 adavantages 这样做。

答案 1 :(得分:2)

何时使用异步操作:

  • 您的应用程序必须查询来自外部源(外部服务,数据库,...)的数据。使用Task的异步操作是可伸缩应用程序的关键,因为您的线程不会被阻塞等待外部源。
  • 您需要执行大量计算绑定操作。由于计算绑定操作发生在CPU上,因此并行化这些操作可以大大提高应用程序吞吐量,尤其是当您的应用程序在多核计算机上运行时。

话虽如此,我们并不总是使用异步:http://msdn.microsoft.com/en-us/magazine/hh456402.aspx

典型的情况是,我们不需要查询来自外部来源的数据,它已经在那里:

  

实际上,开发人员可以避免使用它   特定的一小组用例中的异步方法,尤其适用于   将以更细粒度的方式访问的库方法。   通常,当知道该方法可能时就是这种情况   实际上能够同步完成,因为它的数据   依赖已经可用

Task的异步操作确实有开销:

  

在设计异步方法时,Framework开发人员花了一个   很多时候优化远离对象分配。这是因为   分配代表了可能的最大性能成本之一   异步方法基础结构。分配的行为   对象通常很便宜。分配对象类似于填充   你的购物车与商品,因为它不会花费你太多   努力将物品放入购物车;这是你真正退房的时候   你需要拿出钱包并投入大量资金   资源。 虽然分配通常很便宜,但产生的垃圾   当涉及到应用程序时,集合可以是一个showstopper   性能