Кто-нибудь знает о реализации ленивого потока в .net? IOW, я хочу создать такой метод:
public Stream MyMethod() {
return new LazyStream(...whatever parameters..., delegate() {
... some callback code.
});
}
и когда мой другой код вызывает MyMethod() для возврата и извлечения потока, он фактически не будет выполнять никакой работы, пока кто-то действительно не попытается прочитать из потока. Обычным способом было бы заставить MyMethod принимать параметр потока в качестве параметра, но в моем случае это не сработает (я хочу передать возвращенный поток в MVC FileStreamResult).
Чтобы дополнительно объяснить, что я ищу, это создать многоуровневую серию преобразований, поэтому
Набор результатов базы данных = (преобразован в) => поток байтов = (связан с) => GZipStream = (передан в) => конструктор FileStreamResult.
Результирующий набор может быть огромным (ГБ), поэтому я не хочу кэшировать результат в MemoryStream, который я могу передать конструктору GZipStream. Скорее, я хочу получить из набора результатов по мере того, как GZipStream запрашивает данные.