C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: NetworkStreamのReadAsyncの動作


(過去ログ 125 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74641 / inTopicNo.1)  NetworkStreamのReadAsyncの動作
  
□投稿者/ なぎ (1回)-(2015/01/18(Sun) 15:10:43)

分類:[.NET 全般] 

こんにちは。.NET 4.5 C#を使っています。

下の非同期ネットワーク通信の受信側のソースコードでns.ReadAsyncに入っている時に
(CancellationTokenSource)cts.Cancel();を叩いてもExceptionが飛びません。
何かを受信すればExceptionが飛びますが、受信しない場合は永遠に待ち続けます。
Cancelしたら受信待ちしていてもExceptionを飛ばす方法はありますか?

        async void acceptClient(System.Net.Sockets.TcpClient client)
        {
            var ns = client.GetStream();
            byte[] result_byte = new byte[256];
            do
            {
                try
                {
                    int result_size = await ns.ReadAsync(result_byte, 0, result_byte.Length, cts.Token);
                }
                catch (OperationCanceledException)
                {
                    //(ry
                }
                //(ry
            } while (ns.DataAvailable);
            //(ry
        }

引用返信 編集キー/
■74652 / inTopicNo.2)  Re[1]: NetworkStreamのReadAsyncの動作
□投稿者/ Hongliang (266回)-(2015/01/19(Mon) 19:19:33)
ReadAsyncを使う限りは多分無理じゃないでしょうか。
Stream::BeginReadが返すIAsyncResultのAsyncWaitHandleと、CancellationToken::WaitHandleの二つでWaitHandle.WaitAnyするとか。
// この辺の処理を一つにまとめてReadAsyncWithCancelといったメソッドにすれば呼び出し側はメソッド呼び出し部分以外修正しなくて済みますね。
引用返信 編集キー/
■74653 / inTopicNo.3)  Re[2]: NetworkStreamのReadAsyncの動作
□投稿者/ なぎ (2回)-(2015/01/21(Wed) 02:51:09)
理解出来ました。
ありがとうございます。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -