最近我遇到了越来越多的人,他们的代码类似于以下内容:
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,但仍然这样做似乎很愚蠢。是否有任何具体原因可以使用此方法,而不仅仅是在构造函数中安装回调一次并在对象的生命周期内?
这就像我可以举的例子一样简单。忽略它是一种将异步对象转换为同步对象的包装器这一事实。我只是对添加和删除事件的方式感到好奇。