为什么从Web Api方法返回Task<T>
的做法不是默认值,而是在Visual Studio中创建新的Web Api控制器时获得的方法?
这样做有什么不利之处吗?
public class MyController : ApiController
{
public Task<string> Boo()
{
return Task.Factory.StartNew(() =>
{
return "Boo";
});
}
}
答案 0 :(得分:3)
这样做有什么不利之处吗?
是的,你没有充分的理由让你的代码不那么可读,更长,性能也更差。我没有看到任何 adavantages 这样做。
答案 1 :(得分:2)
何时使用异步操作:
Task
的异步操作是可伸缩应用程序的关键,因为您的线程不会被阻塞等待外部源。话虽如此,我们并不总是使用异步:http://msdn.microsoft.com/en-us/magazine/hh456402.aspx
典型的情况是,我们不需要查询来自外部来源的数据,它已经在那里:
实际上,开发人员可以避免使用它 特定的一小组用例中的异步方法,尤其适用于 将以更细粒度的方式访问的库方法。 通常,当知道该方法可能时就是这种情况 实际上能够同步完成,因为它的数据 依赖已经可用。
Task
的异步操作确实有开销:
在设计异步方法时,Framework开发人员花了一个 很多时候优化远离对象分配。这是因为 分配代表了可能的最大性能成本之一 异步方法基础结构。分配的行为 对象通常很便宜。分配对象类似于填充 你的购物车与商品,因为它不会花费你太多 努力将物品放入购物车;这是你真正退房的时候 你需要拿出钱包并投入大量资金 资源。 虽然分配通常很便宜,但产生的垃圾 当涉及到应用程序时,集合可以是一个showstopper 性能强>