何时以及为何不在C#5.0 ASP.NET MVC 4或Web API中使用基于任务的异步编程

W3M*_*Max 9 asp.net-mvc c#-5.0 asp.net-mvc-4 asp.net-web-api

我试图了解C#5中的异步编程问题以及我一直在问自己的问题是为什么不一直使用它(对于ASP.NET MVC 4或Web API),就像node.js的人一样?

是否有任何缺点(不必要的开销),而不是代码不那么直接(这是一个笑话,因为新的语法很容易理解)?

Jus*_*ony 8

在大多数情况下,确实在任何地方使用它.这就是为什么他们把超过50毫秒的所有内容都变成了异步调用:).

但是,它将与任何异步代码具有相同的缺陷.调试可能会变得更棘手.如果你开始做一件事,然后它返回到UI线程上的长任务,它可能导致错误冻结(用户能够在点击后移动,但后来在他们看到它时什么都不做的时候就不能).等等

如果你通过等待值的代码运行它,那么无论如何它将像同步代码一样运行.并且,如果它遇到缓存或某些快速操作,那么它将不会因效率而异步运行.所以,这最后一点意味着即使在这些调用中执行编译器魔术会有开销,如果调用已经完成并且因此不值得开销,那么魔法也不会完成.

所以,是的,我会说它几乎无处不在:)这对.NET来说是一个很好的一步

UPDATE

如果相信这篇文章那么它只能证明我说的是正确的.如果调用时间少于50毫秒,则由于以这种方式写入的开销,它不会也不应该是异步的.而且,实际上通常会触发同步动作而不是异步动作.但是,如果它超过50毫秒,那么您只能从异步调用中获益