这些事情的答案总是“视情况而定”。
在您的特定情况下,您正在为来自 IIS 的请求提供服务,您绝对希望尽可能利用这一点,但您必须以有利于 IIS 的方式进行操作。
例如,当客户端向 ASP.NET 页面发出请求时(我假设是这种情况,询问有关 IIS 和 .NET 的问题,这确实是唯一的选择),服务器已启动一个线程来处理您的请求. 当然,如果有很多请求,那么它会占用很多线程,可能超出服务器的处理能力,这意味着一些请求必须等待而其他请求正在处理。
如果在您的线程中(阻塞服务器上的其他线程)您必须在其他地方等待其他工作,那么在等待响应(来自 Web 服务、数据库)时阻塞其他线程没有多大意义, ETC)。最好将线程返回给服务器,然后在您准备好再次工作并提供响应时告诉服务器。
为此,ASP.NET 具有让服务器知道它可以在您等待响应时执行其他操作的机制。
ASP.NET WebForms 有异步页面(我个人觉得有点复杂),而 ASP.NET MVC在版本 4 中有异步方法(更适合基于任务的异步模式)。
也就是说,应该注意的是,如果您在等待响应时必须独立完成其他工作,那么没有理由将线程返回给服务器,只需完成您的工作,当您到达你不能再往前走了,让出控制权回来。
不管你做什么,不要等待任务的结果;您正在阻止服务器将该线程用于其他用途,而您除了等待之外什么都不做。这可能是可扩展性的最大障碍,而了解您不需要占用服务器资源的地方是编写高度可扩展系统的关键之一。