FTP サーバー間でファイルを移動するファイル転送アプリケーションがあります。いつでも何十ものファイルを移動させることができます。FTP サーバーのフラッディングを防ぐために、モニターおよびセマフォ ロックのシステムを使用しています。
コール スタックに従って、FTP クライアントが System.Net.Sockets.Socket.Receive() 内のどこかでフリーズすることがよくあります。例外が発生しないため、問題に対処できません。FTP クライアントを使用したい他のスレッドをブロックしているため、スレッドをキャンセルしたいと思います。
System.Net.Sockets.Socket.Receive() を最終的に呼び出すメソッドを新しいスレッドで開始し、一定期間後にスレッドを中止することを検討しましたが、スレッドの中止後にソケットが開いたままになることを懸念しています。応答しないスレッドの後に、より適切に強制終了してクリーンアップする方法はありますか?