Во-первых, вы должны избавиться от HttpResponseMessage
, как вы указали в своем ответе, но не в исходном вопросе.
Однако наиболее вероятной проблемой является использование DefaultRequestHeaders
. Вы должны использовать это только для заголовков, которые применяются к каждому запросу , который будет отправлять экземпляр HttpClient
, а затем вы должны установить их только один раз , когда вы создаете клиента, как документация подразумевает («Заголовки, установленные в этом свойстве, не нужно снова устанавливать в сообщениях запроса»).
Хотя HttpClient
по существу поточно-ориентирован, DefaultRequestHeaders
( и BaseAddress
) свойства не являются. Вы изменяете эти значения, в то время как экземпляр клиента потенциально занят, используя их в другом месте. Неясно, используете ли вы синглтон HttpClient
и в других местах, возможно, изменив там и заголовки по умолчанию, но если это так, это значительно увеличит шансы возникновения проблем.
Некоторые дополнительные ссылки о ненарезной безопасности этих свойств:
https://github.com/dotnet/dotnet-api-docs/issues/1085
http://www.michaeltaylorp3.net/httpclient-is-it-really-thread-safe/
https://github.com/MicrosoftDocs/architecture-center/issues/935