【问题标题】:System.Net.WebClient - should I use AsyncSystem.Net.WebClient - 我应该使用 Async
【发布时间】:2016-09-15 09:43:07
【问题描述】:

我有一个 C# Web 应用程序,它调用 Web 服务,然后为浏览器呈现一个页面。在this advice 之后,我选择使用 System.Net.WebClient 来处理请求,因为它有一个简洁的界面和我需要的所有控件。

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

【问题讨论】:

    标签: c# web-services


    【解决方案1】:

    一般来说,异步 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;
    }
    

    如果每个线程都忙于等待外部服务,那么您的线程池中只有这么多线程;您的网络服务器将停止服务请求。至于你的具体问题 - 试试看,你会发现。

    【讨论】:

    • 我开始怀疑了。我希望 WebClient 可能足够聪明地执行异步但对我隐藏它:停放我的堆,释放线程,当请求返回时唤醒事物。我现在看到我希望太多了!
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多