在独立的Windows应用程序(Wpf / Winforms)中,我可以看到使用长时间运行方法的异步实现来保持UI响应的好处。
据我所知,IIS将负责处理线程,例如Web服务在处理另一个请求时不会阻塞。
所以我的问题是:
我有兴趣听取您的经历,而不仅仅是理论文章的链接。
由于
答案 0 :(得分:3)
一般来说,通过async
/ await
,如果他们使用自然异步操作,Web服务就可以获益。这是因为async
可以在等待操作完成时将IIS线程返回到线程池,而不是阻塞该线程。
我没有在WCF服务上听过很多数字,但在MVC / WebAPI方面,我听说过10x-100x范围内的可扩展性优势。
“自然异步”通常表示“基于I / O”。显然,如果只使用Task.Run
将CPU绑定(或阻塞)调用卸载到线程池线程上,则没有任何好处 - 您只需将一个线程交换给另一个线程。但是如果您的实现是I / O绑定的,那么您可以使用async
来最大限度地使用线程池。
要记住的另一件事是整个系统的可扩展性。即,如果您的WCF调用只是转而调用单个SQL Server后端,那么您可能无法从扩展WCF中获得任何好处,因为SQL Server将成为您的可伸缩性瓶颈。
但总的来说,我建议在服务器端代码上使用async
/ await
进行任何自然异步工作。