Dmi*_*ruk 0 .net c# collections immutability
我试图在这里揭穿不可变的集合.我的攻击点是经典的pub-sub事件代理,我们维护ImmutableHashSet<Subscription>订阅.
然后订阅操作就可以了
var s = new Subscription(this, subscriber);
subscriptions = subscriptions.Add(s);
Run Code Online (Sandbox Code Playgroud)
并且发布操作会做类似的事情
foreach (var s in subscriptions)
s.Subscriber.OnNext(args);
Run Code Online (Sandbox Code Playgroud)
但是,让我们假设在发布操作发生时,有人订阅,变量subscriptions被替换.将foreach循环正常运行,或将它被彻底打破?(如果是这样,可以做些什么来解决这个问题?)谢谢.
该subscriptions变量仅在循环开始时读取.请记住,foreach将代码翻译成以下内容:
using (var iterator = subscriptions.GetEnumerator())
{
while (iterator.MoveNext())
{
var s = iterator.Current;
s.Subscriber.OnNext(args);
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,subscriptions在你调用之后改变变量的值GetEnumerator()根本不会影响其余的行为 - 它只会在下次影响它.(假设有相关的记忆障碍,等等)
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |