This is an ideal case of race condition . Here you create a stream and then start it. But keep in mind there is a delay for the actual start of the thread when you call the start method on it. This delay is likely to give your Console.ReadKey method a chance to enter the execution thread and wait for user input. At this point, the Console.ReadKey method locks your console with a lock on Console.InternalSyncObject and blocks waiting for input. In this case, the other execution path is blocked until we enter it. As soon as you press the key, which indirectly releases the lock on Console.InternalSyncObject and allows the thread to continue execution. I suppose this is what happens in your case.
Although this does not mean that you are trying to achieve, you can see the flow executing when replacing Console.RedKey with Console.ReadLine() .
source share