Quais são algumas das razões pelas quais o NetworkStream.Read seria interrompido / bloqueado?

documentação do @MSDN parece sugerir que o NetworkStream.Read sempre retorne imediatamente. Se nenhum dado for encontrado, ele retornará 0. No entanto, eu tenho algum código atualmente implantado, que somente em alguns casos (e ainda não descobri quais ainda), o NetworkStream.Read parece travar. Aqui está o rastreamento de pilha que eu pude reunir de um arquivo de despejo

00000000705ae850 000007fef784f60d DomainBoundILStubClass.IL_STUB(IntPtr, Byte*, Int32, System.Net.Sockets.SocketFlags)
00000000705ae930 000007fef785c930 System.Net.Sockets.Socket.Receive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.Net.Sockets.SocketError ByRef)
00000000705ae9b0 000007ff004eb668 System.Net.Sockets.NetworkStream.Read(Byte[], Int32, Int32)
00000000705aea40 000007fef784e6ae MySocketStuff.SocketConnectCallback(System.IAsyncResult)
00000000705aeb20 000007fef84f2bbb System.Net.LazyAsyncResult.Complete(IntPtr)
00000000705aeb90 000007fef7853c7b System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
00000000705aebe0 000007fef784e5d3 System.Net.ContextAwareResult.Complete(IntPtr)
00000000705aec40 000007fef7d027f9 System.Net.LazyAsyncResult.ProtectedInvokeCallback(System.Object, IntPtr)
00000000705aeca0 000007fef8b9815e System.Net.Sockets.Socket.ConnectCallback()
00000000705aed20 000007fef93e14c2 System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(System.Object, Boolean)

Observe que o NetworkStrea.Read realmente chama Socket.Receive, que pode estar bloqueando tanto quanto eu entendo. Só não sei por que às vezes isso iria bloquear e às vezes nã

questionAnswers(4)

yourAnswerToTheQuestion