我应该使用Async吗?

本文关键字:Async 我应该 | 更新日期: 2023-09-27 18:07:02

我有一个c# web应用程序,它发出一个web服务调用,然后为浏览器呈现一个页面。按照这个建议,我选择使用System.Net.WebClient作为请求,因为它有一个简洁的接口和所有我需要的控制。

WebClient提供了所有下载方法的异步版本。我应该使用它们吗?我不在乎当前用户是否等待。在渲染页面之前,我需要web服务结果,同时我没有其他事情要做(为她)。但是,当一个用户的web服务调用完成时,我真的很关心我的服务器是否被占用。如果这是javascript,主线程上的同步web请求至少会占用整个窗口。在asp.net中是这种情况吗?由于我无法控制的原因,我的web服务请求位于一堆15个方法调用的底部。我是否必须将它们全部转换为异步才能看到任何优势?

我应该使用Async吗?

一般来说,异步IO不会产生更快的每个请求响应,但理论上它可以增加吞吐量。

public async Task<IActionResult> YourWebApiMethod() {
  // at this point thread serving this request is returned back to threadpool and   
  // awailable to serve other requests
  var result = await Call3ptyService();
  // once IO is finished we grab new thread from thread pool to finish the job
  return result;
}
// thread serving this request is allocated for duration of whole operation 
public IActionResult YourWebApiMethod() {
  return Call3ptyService().Result;
}

如果每个线程都在忙着等待外部服务,那么线程池中只有这么多线程;您的web服务器将停止服务请求。