[英]Do I need to unsubscribe?
I have the following code: 我有以下代码:
public void UnPublishDatabases(IReadOnlyCollection<IPublishedDatabase> sqlDatabases)
{
var listener = new UnpublishDatabaseListener();
listener.DatabaseUnpublished += db =>
{
OnDatabaseUnpublished(db);
listener.DatabaseUnpublished -= OnDatabaseUnpublished;
};
_publishController.Unpublish(sqlDatabases, listener);
//...
}
And diagnostic processor gives me the following warning: 诊断处理器给我以下警告:
Event 'listener.DatabaseUnpublished' should not be subscribed with the same 'listener.DatabaseUnpublished' object.
So I try to understand what is wrong here. 所以我试着理解这里有什么问题。 And try to find how to change the code.
并尝试找到如何更改代码。
Probably it solves the warning: 可能它解决了警告:
public void UnPublishDatabases(IReadOnlyCollection<IPublishedDatabase> sqlDatabases)
{
var listener = new UnpublishDatabaseListener();
//save ref
var listenerCopy = listener;
listener.DatabaseUnpublished += db =>
{
OnDatabaseUnpublished(db);
//use it
listenerCopy.DatabaseUnpublished -= OnDatabaseUnpublished;
};
_publishController.Unpublish(sqlDatabases, listener);
//...
}
Also I have a question - do I really need to unsubscribe here ? 我也有一个问题 - 我真的需要在这里取消订阅吗? Because listener is just a local object.
因为监听器只是一个本地对象。
public class UnpublishDatabaseListener
{
public event Action<IPublishedDatabase> DatabaseUnpublished;
//...
}
Store the delegate in a variable so that it can be used to subscribe and unsubscribe in the lambda handler. 将委托存储在变量中,以便可以在lambda处理程序中使用它来订阅和取消订阅。
public void UnPublishDatabases(IReadOnlyCollection<IPublishedDatabase> sqlDatabases) {
var listener = new UnpublishDatabaseListener();
Action<IPublishedDatabase> handler = delegate { };
handler = db => {
OnDatabaseUnpublished(db);
//unsubscribe
listner.DatabaseUnpublished -= handler;
};
//subscribe
listener.DatabaseUnpublished += handler;
_publishController.Unpublish(sqlDatabases, listener);
//...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.