Ber*_*ian 1 asp.net-mvc asynchronous task-parallel-library .net-core
我不明白,我已经看到有提供多种方法的.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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将result只在方法中使用一次,而不会多次要求它(哪里await会给我完成的任务结果)有什么区别?我基本上是StateMachine在MethodAsync为什么创建一个?我non-async想我可以更快地进行手术。
如果我没有在另一个方法上委托方法 Task(如下所示),为什么要使用async版本?我问是因为即使MVC Controller默认情况下模板也提供CRUD使用这些async版本的所有操作。
Task tsk=Task.Run(async()=> await MethodAsync() );
Run Code Online (Sandbox Code Playgroud)
PS在我的情况下是我想念的东西。使用async(内部旋转状态机)更快,然后使用非异步版本吗?
有什么不同?
可扩展性。具体来说,同步方法会阻塞调用线程,而异步方法则不会。
这意味着(对于ASP.NET应用程序)意味着同步操作方法在请求持续时间内会阻塞请求线程,而异步操作方法不会阻塞该线程。
反过来,这会产生更大的可伸缩性。由于线程池是一种有限的资源(特别是由于线程注入速率有限),因此异步代码允许您的应用使用更少的线程来处理更大的负载。
有关更多信息,请参见我在异步ASP.NET上的文章中的“同步请求与异步请求处理”部分。本文的该部分适用于所有服务器技术,包括ASP.NET Core。您还可以通过限制线程池的增长率来检查出这一可扩展性差异的要点。我没有将该示例移植到ASP.NET Core,但是应该很简单。
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |