为什么我要使用异步而不是非异步方法
Why would i use async instead of non async method
我不明白,我看到 .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
只会给我完成的任务结果)什么是区别 ?
我基本上是在我的 MethodAsync
中创建一个 StateMachine
是为了什么?
我想我可以更快地完成操作 non-async
。
如果我不将方法委托给单独的 Task
(如下所示),我为什么要使用 async
版本?
我问是因为默认情况下 MVC Controller
模板也提供使用 async
版本的所有 CRUD
操作。
Task tsk=Task.Run(async()=> await MethodAsync() );
P.S 在我的场景中,我 missed.Is 使用 async
(内部旋转状态-机),然后是非异步版本?
what is the difference?
可扩展性。具体来说,同步方法会阻塞调用线程,而异步方法则不会。
这意味着(对于 ASP.NET 应用程序)同步操作方法会在请求期间阻塞请求线程,而异步操作方法不会阻塞该线程。
这反过来会产生更大的可扩展性。由于线程池是一种有限的资源(特别是,因为它的线程注入率有限),异步代码允许您的应用程序以更少的线程处理更大的负载。
有关详细信息,请参阅 my article on async ASP.NET; that section of the article applies to all server technologies, including ASP.NET Core. You can also check out this gist 中的 "Synchronous vs. Asynchronous Request Handling" 部分,该部分通过限制线程池增长率演示了可伸缩性差异。我还没有将该示例移植到 ASP.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;
}
在这种情况下,我将在我的方法中只使用一次 result
并且我不会多次要求它(其中 await
只会给我完成的任务结果)什么是区别 ?
我基本上是在我的 MethodAsync
中创建一个 StateMachine
是为了什么?
我想我可以更快地完成操作 non-async
。
如果我不将方法委托给单独的 Task
(如下所示),我为什么要使用 async
版本?
我问是因为默认情况下 MVC Controller
模板也提供使用 async
版本的所有 CRUD
操作。
Task tsk=Task.Run(async()=> await MethodAsync() );
P.S 在我的场景中,我 missed.Is 使用 async
(内部旋转状态-机),然后是非异步版本?
what is the difference?
可扩展性。具体来说,同步方法会阻塞调用线程,而异步方法则不会。
这意味着(对于 ASP.NET 应用程序)同步操作方法会在请求期间阻塞请求线程,而异步操作方法不会阻塞该线程。
这反过来会产生更大的可扩展性。由于线程池是一种有限的资源(特别是,因为它的线程注入率有限),异步代码允许您的应用程序以更少的线程处理更大的负载。
有关详细信息,请参阅 my article on async ASP.NET; that section of the article applies to all server technologies, including ASP.NET Core. You can also check out this gist 中的 "Synchronous vs. Asynchronous Request Handling" 部分,该部分通过限制线程池增长率演示了可伸缩性差异。我还没有将该示例移植到 ASP.NET Core,但应该很简单。