Skip to content

Commit

Permalink
Reverted
Browse files Browse the repository at this point in the history
added prune method
  • Loading branch information
brianlagunas committed Jan 13, 2019
1 parent 9399b9d commit 57ad662
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 9 deletions.
1 change: 1 addition & 0 deletions Source/Prism.Tests/Events/PubSubEventFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public void EnsureSubscriptionListIsEmptyAfterSubscribeAgainAMessage()
SubscribeExternalActionWithoutReference(pubSubEvent);
GC.Collect();
SubscribeExternalActionWithoutReference(pubSubEvent);
pubSubEvent.Prune();
Assert.True(pubSubEvent.BaseSubscriptions.Count == 1, "Subscriptionlist is empty");
}

Expand Down
34 changes: 25 additions & 9 deletions Source/Prism/Events/EventBase.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@



using System;
using System.Collections.Generic;
using System.Linq;
Expand Down Expand Up @@ -45,7 +42,6 @@ protected virtual SubscriptionToken InternalSubscribe(IEventSubscription eventSu

lock (Subscriptions)
{
Prune();
Subscriptions.Add(eventSubscription);
}
return eventSubscription.SubscriptionToken;
Expand Down Expand Up @@ -97,26 +93,46 @@ public virtual bool Contains(SubscriptionToken token)
}
}

private void Prune()
private List<Action<object[]>> PruneAndReturnStrategies()
{
List<Action<object[]>> returnList = new List<Action<object[]>>();

lock (Subscriptions)
{
for (var i = Subscriptions.Count - 1; i >= 0; i--)
{
if (_subscriptions[i].GetExecutionStrategy() == null)
Action<object[]> listItem =
_subscriptions[i].GetExecutionStrategy();

if (listItem == null)
{
// Prune from main list. Log?
_subscriptions.RemoveAt(i);
}
else
{
returnList.Add(listItem);
}
}
}

return returnList;
}

private List<Action<object[]>> PruneAndReturnStrategies()
/// <summary>
/// Forces the PubSubEvent to remove any subscriptions that no longer have an execution strategy.
/// </summary>
public void Prune()
{
lock (Subscriptions)
{
Prune();
return _subscriptions.Select(x => x.GetExecutionStrategy()).ToList();
for (var i = Subscriptions.Count - 1; i >= 0; i--)
{
if (_subscriptions[i].GetExecutionStrategy() == null)
{
_subscriptions.RemoveAt(i);
}
}
}
}
}
Expand Down

0 comments on commit 57ad662

Please sign in to comment.