【发布时间】:2017-08-20 20:01:25
【问题描述】:
我们在代码库中看到了以下堆栈跟踪:
System.ArgumentException: An item with the same key has already been added.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Net.Http.Headers.HttpHeaders.AddHeaderToStore(String name, HeaderStoreItemInfo info)
at System.Net.Http.Headers.HttpHeaders.SetParsedValue(String name, Object value)
at System.Net.Http.Headers.HttpContentHeaders.get_ContentLength()
at System.Net.Http.HttpClientHandler.PrepareAndStartContentUpload(RequestState state)
并将其缩小到我们调用的代码中的某个地方
HttpContent.ReadAsStringAsync()
当这种情况发生时,我们确定 HttpContent 的实例正被多个线程使用,所有这些线程都以某种方式试图读取实际内容。尚未弄清楚内容的阅读如何影响标题。
如果可以执行 HttpContent 的深度克隆,假设所有内容负载已下载,我们会研究此选项。
有人遇到过这个问题,如果是,你是怎么解决的?
提前致谢。
【问题讨论】:
-
请提供一些复制代码。看起来您正在尝试上传内容,但由于某种原因它无法添加 Content-Length 标头,但如果没有更多代码就很难判断。
标签: c# race-condition httpcontent