在MVC中混淆了异步等待

时间:2017-08-10 08:38:14

标签: c# ajax asp.net-mvc async-await

今天我问了一个问题How can I run a method without waiting for long running process,我得到了一个很好的答案,ajax解决了我的问题。 但现在我的问题是为什么我仍然应该使用async await关键字?

kubectl --username=user@gmail.com get nodes
Error from server (Forbidden): User "system:anonymous" cannot list nodes at the cluster scope. (get nodes)

async是否等待关键字以避免阻止UI?但在网络上,我不能在网络中看到任何阻止用户界面,而不像WinForms。即使没有异步等待关键字,上面的代码和ajax也能很好地工作。所以有人请解释我为什么要使用它们以及它们的用法是什么?

2 个答案:

答案 0 :(得分:0)

如果我没有弄错异步,在这种情况下,让你在服务器上处理更多的请求:当你有延迟(从SQL?FS等待数据)时,可以接受另一个请求并开始其循环。 / p>

答案 1 :(得分:0)

请求异步的原因是允许单个线程处理多个请求,而不是关于UI的任何事情(毕竟服务器实际上没有UI,它只是以某种方式返回文件或数据) )。如果方法是同步的,则在您等待时将阻止处理此请求的线程,如果您一次收到大量请求,则可以快速设置您使用的线程数。由于线程确实带来了一些开销,因此可能会对服务器的性能产生负面影响。

通过使用async / await,该线程可以同时处理另一个请求,这比仅仅阻塞线程一段时间要快得多,效率也高得多。在您的示例中,一个线程可以同时处理DoSomeAsyncStuff()的多个调用 - 当它到达await Task.Delay(20000);时,可以处理另一个请求,要么从先前命中的await恢复,要么从方法