为什么我要使用异步而不是非异步方法

Why would i use async instead of non async method

我不明白,我看到 .Net Framework 提供的许多方法都有 asyncnon-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,但应该很简单。