あなたが所有しているオブジェクトIDisposable
を処分することは良い練習ですが、それを処分する必要はありません。
実際、WebException.Response
またはそれから返されたストリームを処理しようとすると、上の呼び出しチェーンの例外ハンドラでそのプロパティを読み取ろうとするコードが発生する可能性があるため、前述の問題が発生します。
を投げる前に、HttpWebRequest
が内部でネットワークストリームからメモリストリームを作成し、内部のネットワークストリームが既に閉じられているためです。したがって、実際には、その時点で管理されていないリソースはありません。これは、例外を処理しやすくするための決定だったと思います。
残念ながら、MSDNのドキュメントにはこの動作についての説明がありません。技術的には実装が将来変更され、HttpWebResponse
や関連ストリーム(WebException
)を処理しないコードに問題が発生する可能性がありますが、多くのアプリケーションが現在の動作に依存する場合、この動作が実装を変更する可能性は非常に低いです。
あなたが所有しているオブジェクトIDisposable
を処分することをお勧めしますが、追加する必要があります。可能であれば、代わりにHttpClient
クラスを使用してください。そのため、このような状況にはまったく対処する必要はありません。できない場合はWebException
の処理を検討し、コードの発信者にWebException
を公開しない新しいタイプの例外を投げて、発信者が処分した後にWebException.Response
にアクセスしようとしている状況に遭遇しないようにします。
免責事項:私はMicrosoftで働いていますが、これは私の雇用主または.NET Frameworkチームの意見ではありません。保証は意味しません。
[WebResponseインスタンスを正しく処分するにはどうすればいいですか?](https://stackoverflow.com/questions/1887314/how-to-properly-dispose-of-a-webresponse-instance) – Deantwo