Isto é como se eu lhe dissesse para levantar a mão assim que eu pronunciasse o quarto da última palavra que estou prestes a dizer. Eu não vou lhe dizer de antemão quantas palavras estou prestes a dizer.
Um canal é um fluxo . Seus dados não têm tamanho, ele só tem operações para obter o próximo elemento e / ou inserir um elemento nele, e o resultado é um dado ou um sinal de que não há mais dados.
Assim, a menos que você primeiro recupere todos os dados do fluxo, coloque-os em um buffer, conte seu comprimento, "retroceda" o fluxo e recupere quatro elementos a menos, isso não pode ser feito.
EDIT: Eu preciso fazer mais coisas pensando em vez de chegar com analogias inteligentes :) Um fluxo não diz "me pare imediatamente n elementos antes do último", mas sim "transmitir todos os elementos, exceto o último n", e mantendo um buffer de apenas n elementos, e esperando até que os primeiros n elementos tenham sido recebidos antes de transmitir o primeiro, é possível. Obviamente, isso não funcionará em situações como telecomunicações, onde você deseja que os dados sejam enviados imediatamente após serem recebidos, como você poderia, se quisesse os primeiros n elementos. E eu suponho que truncate
não faz desse jeito.
(tentativa de downvoting self -1)