C# 在MVC中实现TAP#
很抱歉问了一个一般性的问题,但我想就代码中可以启用TAP(任务异步编程)以获得更好性能的功能/区域提出建议 我还使用了一个WebAPI,在这里我可以使用AsyncWait从数据库中检索数据并执行CRUD操作 但是对于如何在MVC中实现TAP,我们有什么指导方针或具体方法吗 提前谢谢 很抱歉问了一个一般性的问题,但我想就代码中可以启用TAP(任务异步编程)以获得更好性能的功能/区域提出建议 让我们首先了解,什么是异步编程,它只是意味着在后台处理逻辑,而主线程处理继续进行,而不会被阻塞。在同步处理的情况下,会阻塞调用线程。异步处理有两种:C# 在MVC中实现TAP#,c#,asp.net-mvc,async-await,C#,Asp.net Mvc,Async Await,很抱歉问了一个一般性的问题,但我想就代码中可以启用TAP(任务异步编程)以获得更好性能的功能/区域提出建议 我还使用了一个WebAPI,在这里我可以使用AsyncWait从数据库中检索数据并执行CRUD操作 但是对于如何在MVC中实现TAP,我们有什么指导方针或具体方法吗 提前谢谢 很抱歉问了一个一般性的问题,但我想就代码中可以启用TAP(任务异步编程)以获得更好性能的功能/区域提出建议 让我们首先了解,什么是异步编程,它只是意味着在后台处理逻辑,而主线程处理继续进行,而不会被阻塞。在同步处理的
IO Async
,这是主要的使用案例,它适用于进程边界之外的任何调用,如对数据库或web服务/web api的调用,在这种情况下,基于硬件的并发性出现了,因为一旦通过网络调度调用,就不再需要软件线程,软件线程可以返回到线程池来处理其他请求,从而按照@Fabio的建议提高系统的可伸缩性或可用性。软件线程的作用是分派调用并接收结果,没有任何等待,在大多数情况下,假设没有内存逻辑,等待时间非常快<1毫秒。假设池中只有25个线程用于同步调用,它最多可以处理50-100个请求,因为等待管道会因长时间运行的请求(几秒钟)而膨胀,但对于异步处理,可以调度1000个请求,因为它们通过网络被调度以进行处理,不需要等待线程池线程分派内存异步
,这不是最常见的用例,但更多的是释放Ui线程,而逻辑内存处理可以在后台进行。它有助于保持界面的响应性。在这种情况下,Ui也可以响应,因为数据库调用是异步完成的,因为同步调用总是阻塞主线程,使系统无响应async
中,方法需要以await
运算符作为前缀Async wait
启用,如果我们在两者之间的任何地方错过了它,那么调用将变为非异步/阻塞,因为只有当通过网络调度IO调用和任何其他线程接管内存内调用时,实际线程才会被释放。像MVC和WebAPI这样的框架被启用,使得控制器(入口点)在默认情况下是异步的ConfigureAwait(false)
来指示任何池线程接收结果,它不需要输入相同的同步上下文,这是默认的,Ui线程除外,Ui线程不能被任何其他线程替换(因为它是特殊的,并且只能呈现控件)同样的
Async
原则适用于所有框架,如MVC、WebAPI、WCF、
,因为同一框架可以同时进行Async
和Sync
调用,异步调用的行为更像一个方面(横切),线程可以被引导到同步模式(阻塞)或异步模式(非阻塞)下工作,因此,增加系统的可伸缩性/可用性可以实现更好的性能-异步对性能没有帮助,但对可用性有帮助。请查看我的回答,这将有助于回答您可能遇到的大多数问题,如果您仍然有疑问,请回复