質問: await client.ReceiveAsync(); } } } ``` そのため,受信用のサブスレッドとは別で,メインスレッドにて終了処理を行ったときに受信用のサブスレッドの終了処理をさせたいのですが,どのようにするのが適切なのでしょうか. 一般的に,非同期メソッドにはCancellTokenが渡せるようになっていて,そちらで中断処理を刺せるのが正しいと調べてみて分かったのですが,ReceiveAsyncについては,引数が渡せるものがないです.MSDNのリファレンスを見ると,socketが閉じると例外を投げるようなので,現状として,UdpClientをクラスのメンバとして取り扱い,他のメソッドにてClose()を叩くことで,例外を発生させて終了させています. どなたかご教授頂ければ幸いです.
回答: 紆余曲折を経て自己解決いたしました. 受信をやめる場合には,Close()メソッドを叩けば良いようです.(今までコンストラクタでエンドポイントを指定しており,Connect()とClose()の組み合わせを失念しておりました) 従って,whileなりforなりで無限ループを回しておき,その中でReceiveAsyncで待ち受けておき,中止したいときには別のメソッドからClose()を叩くと言うのが正解のようです. hihijijiさんにご紹介頂いたBeginReceive,EndReceiveについてですが,元々.Net1.0から存在するメソッドのようで,古いバージョンのC#向けのものが残っているだけのようです.C#5.0,.NET Framework4.5から導入されたTask,await/asyncの機能にリリースされたメソッドのようです. なので,特に理由がない限り実装がシンプルになるためReceiveAsyncを使う方が良いかと思います.