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 秒後のコンソールの結果:
送信を開始しています...
ファイルが送信されました!
2 番目のメッセージがすぐに表示されます。後の命令が実行されています。
その間、サーバーは引き続きファイルを受信し、その側ではすべてが正常に機能します。それは良くなります-送信プログラムを強制終了すると、送信中に受信が停止しません。Degugger は、アプリが完全に終了したことを明確に示しています。ただし、受信が完全に停止するまで、さらに数メガバイトが送信されます。
だから私の質問 - Write メソッドが終了するまで、メインスレッドをブロックする方法はありますか?