質問: 最近C#でプログラムを作成している中でしばしば気がかりな事があります. ネットワーク通信をC#で取り扱う際に,非同期でデータを受信するメソッドが多々ありますが,受信したデータを処理する最中に次のデータを受信した場合はどのようになるのでしょうか.なるべくロストをしない場合にはどのようにすべきなのでしょうか. 例として,UDPでの通信を考えたとき,ReceiveAsyncで受信をした際に,データの受信自体は非同期で行われると思います.しかし,連続でデータを受信・処理する事を考えると,データの受信頻度が上がってくると処理はサブスレッドの回してなるべくReceiveAsyncのメソッドに戻るまでを早くすべきかと思うのですが,サブスレッドの生成自体にもコストが掛かるかと思います. TCPであれば,受信確認があるため問題は無いかと思いますが,UDPやWebSocketでは一般的にどのように取り扱われているのでしょうか?
回答: Task使えばいいんでは。 スレッドプールを使うのでスレッド生成コストは、ほとほどに気にするだけでいい たぶん、やってほしいことをやってくれているのは、 dataflow-task-parallel-library https://docs.microsoft.com/ja-jp/dotnet/standard/parallel-programming/dataflow-task-parallel-library パイプラインをつくると、並列処理もうまいことやれる。 アクターモデルで、キューに詰め込み、キューから処理をしていくことをやってくれる。 追記 https://ufcpp.net/study/csharp/AsyncVariation.html やりたいことはこの最後の図のような仕組みですね。 追記2 https://qiita.com/skitoy4321/items/c19ca3dc7624a7049fd5 今時はChannelsを使うといいみたい。