微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

确保我们只订阅一次事件

如何解决确保我们只订阅一次事件

| 这是我的问题:如果我想确保一个处理程序仅订阅一次,以这种方式订阅是否正确:
x.Event -= Handler;
x.Event += Handler;
想法是“尝试取消订阅,即使我们尚未订阅\”,然后在我们100%未订阅时进行订阅。 这个想法正确吗?如果不正确,为什么?用谷歌搜索了一段时间,我自己似乎找不到答案。     

解决方法

只要您在所有订阅该处理程序的地方都执行此操作,那应该没问题。但是,如果您订阅100次,然后运行该代码,那么您仍将剩下100个订阅。 (顺便说一下,我假设您只使用一个线程。如果两个线程同时执行该代码,则存在竞争条件。它们可以都取消订阅,然后都订阅,剩下两个有效订阅。)     ,您所拥有的不会抛出任何异常,因此它将按预期工作-但这不是很清晰的代码。 我非常喜欢使用布尔标志的测试:
if(!subscribed) {
    x.Event += Handler;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。