Подтвердить что ты не робот

Как правильно распоряжаться потоком при использовании StreamContent

Я пытаюсь вернуть поток с моей конечной точки webapi, а затем очистить, удалив поток.

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

using(var stream = GetStream()){
    var response = new HttpResponseMessage();
    response.Content = new StreamContent(stream);

    return response;
}

Каким будет правильный способ утилизации потока?

(Поскольку MSDN ничего не говорит о поведении StreamContent или его методах, мое временное решение заключается в том, чтобы скопировать содержимое потока в массив байтов и вернуть его.)

4b9b3361

Ответ 1

В качестве единственного ресурса, который должен быть удален, является содержимое HttpResponseMessage, вам не нужно беспокоиться об этом. Рамка предназначена для вас. Он будет располагать HttpResponseMessage, который сделает все необходимое. Удалите использование, и оно должно работать нормально.

HttpResponseMessage будет располагать свой контент, когда он будет удален. См. . Реализация NET Core

StreamContent будет располагать свой поток, когда он будет удален. См. .NET Core-реализация StreamContent

Если вам нужно утилизировать что-то, не размещенное в HttpResponseMessage, вы можете использовать request.RegisterForDispose, как описано Filip Woj