4

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

这样做有什么缺点吗?

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

2 回答 2

3

这样做有什么缺点吗?

是的,你无缘无故地让你的代码变得不那么可读、更长、性能更低。我看不出这样做有什么好处

于 2014-09-11T19:50:02.220 回答
2

何时使用异步操作:

  • 您的应用程序必须从外部来源(外部服务、数据库等)查询数据。在这种情况下使用异步操作Task可扩展应用程序的关键,因为您的线程不会被阻塞等待外部源。
  • 您需要执行大量计算密集型操作。由于计算绑定操作发生在 CPU 上,并行化这些操作可以大大提高应用程序的吞吐量,特别是如果您的应用程序在多核计算机上运行。

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

一个典型的例子是我们不需要从外部查询数据,它已经存在:

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

异步操作Task确实有开销:

在设计异步方法时,框架开发人员花费了大量时间优化对象分配。这是因为分配代表了异步方法基础结构中可能的最大性能成本之一。分配对象的行为通常非常便宜。分配物品类似于在您的购物车中装满商品,因为将物品放入购物车不会花费您太多精力;当你真正检查出你需要拿出你的钱包并投入大量资源的时候。虽然分配通常很便宜,但是当涉及到应用程序的性能时,由此产生的垃圾收集可能是一个障碍

于 2014-09-04T13:52:15.213 回答