1

したがって、usingブロックステートメントの最後に、disposeメソッドが呼び出されることを理解しています。

を使用するとどうなりますか'using(var a = new Stream()) { a.SomethingThrowsAnException() }'

ストリームはまだ彼のdisposeメソッドを通過しますか?

IDisposableを実装するクラスを作成しましたが、メモリ内の内容を失わないことがミッションクリティカルであるため、何か壊滅的な事態が発生した場合、つまり使用しているオブジェクトのようなカスタムストリームがある場合は、データをシリアル化することを計画していました。

助言がありますか?

ありがとう。

4

2 に答える 2

5

はい。ブロックは次のusingようにコンパイルされます。

var a = new Stream();
try
{
     a.SomethingThrowsAnException();
}
finally
{
     a.Dispose();
}
于 2012-05-24T21:55:13.630 に答える
0

finally節が別のスレッドで実行される状況があるかもしれないと思います(この問題については別の質問が投稿されています)。lock.releaseなどの一部の操作は、lock.acquireを実行したのと同じスレッドで実行する必要があるため、問題になる可能性があります。何が原因なのか、またはスレッドの終了を遅らせて、元の新しい操作を実行したスレッドでa.Disposeが発生するようにする方法が正確にはわかりません。

于 2012-07-19T01:28:53.477 に答える