private IEnumerable<EndpointDiscoveryMetadata> MatchTargets(FindCriteria criteria)
{
var collected = new HashSet<EndpointDiscoveryMetadata>(ReferenceEqualityComparer<EndpointDiscoveryMetadata>.Instance);
foreach (var policy in policies)
{
while (collected.Count < criteria.MaxResults)
{
var target = policy.ChooseTarget(criteria);
if (target == null || collected.Add(target) == false)
break;
}
if (collected.Count >= criteria.MaxResults)
break;
}
return collected;
}
}