
System.Net.Sockets.UdpClientを用いた通信プログラムを作成しており,非同期で受信を行いたいと考えています.
現在使用しているメソッドはReceiveAsync()で,awaitをつけて以下のように受信処理を行っております.
C#
1public async Task Open(int port){ 2 using(var client = new UdpClient(new IPEndPoint(IPAddress.Any, port))){ 3 while(true){ 4 var response = await client.ReceiveAsync(); 5 } 6 } 7}
そのため,受信用のサブスレッドとは別で,メインスレッドにて終了処理を行ったときに受信用のサブスレッドの終了処理をさせたいのですが,どのようにするのが適切なのでしょうか.
一般的に,非同期メソッドにはCancellTokenが渡せるようになっていて,そちらで中断処理を刺せるのが正しいと調べてみて分かったのですが,ReceiveAsyncについては,引数が渡せるものがないです.MSDNのリファレンスを見ると,socketが閉じると例外を投げるようなので,現状として,UdpClientをクラスのメンバとして取り扱い,他のメソッドにてClose()を叩くことで,例外を発生させて終了させています.
どなたかご教授頂ければ幸いです.

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/10 09:17
退会済みユーザー
2018/08/10 09:26
退会済みユーザー
2018/08/10 09:28
2018/08/10 09:33