我在用 C# 写入 NetworkStream 时遇到问题。从 MSDN 我读到:
在发送请求的字节数或抛出 SocketException 之前,Write 方法会一直阻塞
好吧 - 就我而言,它的行为就像一个异步方法。线程没有被阻塞。
这是一个代码示例,可以稍微启发一下情况:
TcpClient tcpcl = new TcpClient("192.168.1.128", 1337);
NetworkStream netst = tcpcl.GetStream();
byte[] will_send = File.ReadAllBytes(@"large_file_120_MB.mp4");
Console.WriteLine("Starting transmission...");
netst.Write(will_send, 0, will_send.Length);
Console.WriteLine("File has been sent !");
(... later instructions ...)
执行 1 秒后来自控制台的结果:
开始传输...
文件已发送!
第二条消息立即显示。稍后的指令正在执行。
同时,服务器仍然接收文件,并且一切正常。它变得更好 - 如果我杀死发送程序,在传输过程中,接收不会停止。Degugger 清楚地显示应用程序已完全结束。然而,仍然会传输几兆字节,直到接收完全停止。
所以我的问题 - 有没有办法阻止主线程,直到 Write 方法完成?