最近、次のようなコードを持っている人が増えています。
private AsynchronousReader r;
public SynchronousReader()
{
r = new AsynchronousReader();
// My practice is to put this here
// and then never remove it and never add it again
// thus cleaning up the code and preventing constant add/remove.
//r.ReadCompleted += this.ReadCompletedCallback;
}
private ReadCompletedCallback()
{
// Remove the callback to "clean things up"...
r.ReadCompleted -= this.ReadCompletedCallback;
// Do other things
}
public Read()
{
r.ReadCompleted += this.ReadCompletedCallback;
// This call completes asynchronously and later invokes the above event
r.ReadAsync();
r.WaitForCompletion();
}
人々は、この方法は私が上で示した方法よりも優れていると言い、Silverlightに固有のいくつかの理由を挙げています。彼らはそれがメモリリーク、スレッドの問題を防ぎ、そしてそれが通常の慣行でさえあると述べています。
私はSilverlightをあまり行っていませんが、それでもこれを行うのはばかげているようです。コンストラクターでコールバックを一度だけリグアップする代わりに、オブジェクトの存続期間中にこのメソッドを使用する特定の理由はありますか?
これは私が例を作ることができるのと同じくらい簡単です。非同期オブジェクトを同期オブジェクトに変える一種のラッパーであるという事実を無視してください。イベントの追加と削除の方法にのみ興味があります。