В настоящее время у меня есть этот код
SessionStream(Request.Content.ReadAsStreamAsync(), new { });
Мне нужно как-то "зеркально отобразить" входящий поток, чтобы у меня было два его экземпляра. Что-то вроде следующего псевдокода:
Task<Stream> stream = Request.Content.ReadAsStreamAsync();
SessionStream(stream, new { });
Stream theotherStram;
stream.Result.CopyToAsync(theotherStram)
ThoOtherStream(theotherStram, new { });
Техника, которая всегда работает, - это копировать поток в MemoryStream
а затем использовать его.
Часто, более эффективно просто искать исходный поток обратно в начало с помощью метода Seek
. Это работает только в том случае, если этот поток поддерживает поиск.
Если вы не хотите буферизировать и не можете искать, вам нужно нажать на содержимое потока в блоке два этих двух пользователя. Прочтите блок, напишите его два раза.
Если вам нужна тянущая модель (т.е. Передать читаемый поток некоторому компоненту), он становится очень трудным и задействован поток. Вам нужно будет написать адаптер push-to-pull, который всегда будет трудным.