【发布时间】:2018-11-02 08:21:37
【问题描述】:
正如标题所说,我想禁用流水线功能,但仍然使用连接池(因此 KeepAlive=False 不是一个选项)。原因是较长的请求可能会阻止较短的请求快速执行,但为每个请求打开新连接会明显变慢。
我正在这样做:
_webRequestHandler = new WebRequestHandler();
_webRequestHandler.AllowPipelining = false;
_httpClient = new HttpClient(_webRequestHandler);
await _httpClient.SendAsync(request);
servicePoint = ServicePointManager.FindServicePoint(request.RequestUri);
这似乎没有效果:ServicePoint.SupportsPipelining 属性仍然为真,WebRequestHandler 仅设置 HttpWebRequest 的 Pipelined 属性,但 HttpRequestMessage 上没有任何内容,因此基本上在 WebRequestHandler 上设置 AllowPipelining 没有效果(?)。
我在这里遗漏了什么吗?我确定这是一种常见的情况 - 我该如何实现?
【问题讨论】:
-
longer requests may prevent shorter requests from executing fast你是怎么找到的?看看this -
SupportsPipelining 与 AllowPipelining 完全不同。如果您支持某些东西,则可以决定是否允许使用它。如果您不支持某些东西,无论您是否允许使用它都无关紧要,那么您根本无法使用它。支持是事实,允许是决定,但决定不会影响事实
-
@skyoxZ 我看不出您的链接应该有什么帮助?有关您的问题的解释,请参阅stackoverflow.com/questions/14810890/…(请参阅“线头阻塞”)。
-
@SirRufo 好的。但是我怎样才能关闭它呢?
-
构建一个继承自 HttpClient 的新类,确保将 AllowPipelining 设置为 false 并使用该类。你也可以为此建一个工厂,或者...
标签: c# .net tcp dotnet-httpclient