【发布时间】:2014-06-13 08:53:11
【问题描述】:
我有一个 Web API 项目,其控制器依次向第三方 REST 接口发出 Web 请求。我的控制器 CRUD 函数已标记为异步,但实现方式是我使用 HttpWebRequest 阻塞函数 GetRequestStream 和 GetResponse。
这是否合适或者我也应该使用 HttpWebRequest 的 Begin/End 方法。这似乎有点矫枉过正,因为它会异步一个已经异步的操作,还是允许更多并发的传出 Web 请求?
寻找传入和传出吞吐量的最佳解决方案。
【问题讨论】:
-
你说你标记了那些方法
async但是使用了阻塞方法?仅仅因为方法被标记为async并不意味着它是异步的;特别是,如果您不使用await,那么它是同步的(检查您的警告消息)。 -
是的,控制器被标记为异步,但实现使用同步 HttpWebRequest 调用,因为我的控制器正在等待 Task.Run(sync web request)。所以我想发生了什么是我收到了很多异步传入请求,然后所有这些请求都排队等待同步出站请求?我不明白的事情是,如果我使用 await HttpClient.SendAsync 那么某处肯定会阻塞等待响应,如果我有一个 4 核框但有 100 个请求,那么使用 SendAsync 如何帮助我的出站吞吐量?
标签: asp.net-web-api httpwebrequest