Когда или если Dispose HttpResponseMessage при вызове ReadAsStreamAsync?C#

Место общения программистов C#
Ответить
Anonymous
 Когда или если Dispose HttpResponseMessage при вызове ReadAsStreamAsync?

Сообщение Anonymous »

Я использую System.Net.Http.HttpClient для выполнения HTTP-связи на стороне клиента. У меня весь HTTP собран в одном месте, абстрагирован от остального кода. В одном случае я хочу прочитать содержимое ответа как поток, но потребитель потока хорошо изолирован от места, где происходит HTTP-связь, и поток открывается. В месте, отвечающем за HTTP-связь, я удаляю все содержимое HttpClient.

Этот модульный тест завершится неудачно на Assert.IsTrue(stream.CanRead) :

Код: Выделить всё

[TestMethod]
public async Task DebugStreamedContent()
{
Stream stream = null; // in real life the consumer of the stream is far away
var client = new HttpClient();
client.BaseAddress = new Uri("https://www.google.com/", UriKind.Absolute);

using (var request = new HttpRequestMessage(HttpMethod.Get, "/"))
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
//here I would return the stream to the caller
stream = await response.Content.ReadAsStreamAsync();
}

Assert.IsTrue(stream.CanRead); // FAIL if response is disposed so is the stream
}
Обычно я пытаюсь избавиться от всего IDisposable как можно скорее, но в этом случае удаление HttpResponseMessage также удаляет Stream

code> возвращается из ReadAsStreamAsync.

Поэтому кажется, что вызывающий код должен знать и брать на себя ответственность за ответное сообщение, а также поток, или Я оставляю ответное сообщение нетронутым и позволяю финализатору разобраться с ним. Ни один из вариантов не кажется правильным.

В этом ответе говорится о том, что HttpClient не удаляется. Как насчет HttpRequestMessage и/или HttpResponseMessage?

Я что-то упустил? Я надеюсь, что потребляющий код не будет знать HTTP, но оставлять все эти неутилизированные объекты противоречит многолетней привычке!

Подробнее здесь: https://stackoverflow.com/questions/277 ... treamasync
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»