I think that is a DOS/cmd.exe restriction.
Linux and Unix use pipes that create a stream in memory and feeds the output of one program to the other directly.
DOS and the cmd.exe version implement pipes using temporary files. The output of one executable is redirected to a file. When that program ends then that file is fed into the piped executable. I assume this was because DOS and cmd.exe were not designed to be multi-threaded so didn't have an easy way to implement parallel running executables to allow "true" piping between simultaneous running programs.