在C#扩展方法中订阅事件是不好的做法吗?

And*_*cus 2 c# events extension-methods

在这种情况下,订阅代理CloseCompleted事件是不是很糟糕?

public static void Close(this MyWCFServiceClient proxy)
{
            proxy.CloseCompleted += (o, e) =>
            {
                if (e.Error != null)
                    proxy.Abort();
            };

            proxy.CloseAsync();
}
Run Code Online (Sandbox Code Playgroud)

当代理不再被任何代码引用时,它是否仍会被垃圾收集,或者扩展方法中的事件订阅是否仍然存在对代理的引用?

Mar*_*ell 5

我不会说这是不好的做法,但在一般情况下,显然应该会发生这种情况,即在///标记中清楚地记录下来.但是,在这种情况下,我们讨论的是对象的死亡 - 因此调用者可能在调用该方法后不希望对该对象做太多事情.我还想明确(可能在方法名称中)这是异步的.

重新垃圾收集; 事件使订户保持活力; 不是出版商.如果proxy符合条件,则会收集.匿名方法似乎不访问任何捕获的范围(除了proxy它自己) - 所以无论如何都没有任何有趣的东西(委托实例本身除外).