Этот модульный тест завершится неудачно на 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
}
code> возвращается из ReadAsStreamAsync.
Поэтому кажется, что вызывающий код должен знать и брать на себя ответственность за ответное сообщение, а также поток, или Я оставляю ответное сообщение нетронутым и позволяю финализатору разобраться с ним. Ни один из вариантов не кажется правильным.
В этом ответе говорится о том, что HttpClient не удаляется. Как насчет HttpRequestMessage и/или HttpResponseMessage?
Я что-то упустил? Я надеюсь, что потребляющий код не будет знать HTTP, но оставлять все эти неутилизированные объекты противоречит многолетней привычке!
Подробнее здесь: https://stackoverflow.com/questions/277 ... treamasync
Мобильная версия