在这种情况下,订阅代理CloseCompleted事件是不是很糟糕?
public static void Close(this MyWCFServiceClient proxy)
{
proxy.CloseCompleted += (o, e) =>
{
if (e.Error != null)
proxy.Abort();
};
proxy.CloseAsync();
}
当代理不再被任何代码引用时,它是否仍会被垃圾收集,或者扩展方法中的事件订阅是否仍然存在对代理的引用?
答案 0 :(得分:5)
我不会说这是糟糕的练习,但在一般情况下它可能很明显会发生这种情况,即明确记录在{ {1}}标记。但是,在 this 的情况下,我们讨论的是对象的死亡 - 因此调用者可能在调用该方法后不希望对该对象做很多事情。我还想明确(可能在方法名称中)这是异步的。
重新垃圾收集;事件使订阅者保持活跃;不是出版商。如果///
符合条件,则会收集。匿名方法似乎不访问任何捕获的范围(proxy
本身除外) - 所以无论如何都没有任何有趣的事情(委托实例本身除外)。
答案 1 :(得分:1)
代理有一个对匿名代表的引用,反之亦然。因此,如果没有人引用代理,它和匿名都将被清除。