我不明白,我已经看到有许多方法.Net Framework
都具有async
和non-async
变体。
我的问题是,async
在以下约束条件下,一种方法对我有什么好处:-我不会Task.Result
在同一方法中多次提取
-我没有使用CPU-bound
任务(Task.Run(...)
)
我在MVC
控制器中,我想处理一个post
请求:
[HttPost]
[Route(..)]
public async Task DoSomething(MyModel model)
{
var asyncResult=await NETMethodAsync(model); //PostAsync,WriteAsync....
var nonAsyncResult= NETMethod(model); //Post,Write,....etc..
return result;
}
在这种情况下,我将result
只在方法中使用一次,并且不会多次要求它(哪里await
会给我完成的任务结果)有什么区别?我基本上是StateMachine
在MethodAsync
为什么创建一个?我non-async
想我可以更快地进行手术。
如果我未将方法委托给另一个Task
(如下所示),为什么我要使用async
版本?我问是因为即使MVC Controller
默认情况下模板也提供CRUD
使用这些async
版本的所有操作。
Task tsk=Task.Run(async()=> await MethodAsync() );
PS在我的情况下是我想念的东西。使用async
(内部旋转状态机)然后使用非异步版本是否更快?
有什么不同?
可扩展性。具体来说,同步方法会阻止调用线程,而异步方法则不会。
这意味着(对于ASP.NET应用程序)是同步操作方法在请求期间阻止请求线程,而异步操作方法不阻止该线程。
反过来,这会产生更大的可伸缩性。由于线程池是有限的资源(特别是由于线程注入速率有限),因此异步代码允许您的应用使用更少的线程来处理更大的负载。
有关更多信息,请参见我在异步ASP.NET上的文章中的“同步请求与异步请求处理”部分。本文的该部分适用于所有服务器技术,包括ASP.NET Core。您还可以通过限制线程池的增长率来检查出可扩展性差异的要点。我没有将该示例移植到ASP.NET Core,但是应该很简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句