EnumerationOrchestrator
using Relativity.DataTransfer.Nodes;
using Relativity.Transfer.Enumeration.Interfaces;
using System.Collections.Generic;
using System.Threading;
namespace Relativity.Transfer.Enumeration
{
public class EnumerationOrchestrator : IEnumerationOrchestrator
{
private readonly IEnumeratorProvider _enumeratorProvider;
private readonly IEnumerable<INode> _sourceNodes;
internal EnumerationOrchestrator(IEnumeratorProvider enumeratorProvider, IEnumerable<INode> sourceNodes)
{
Assertions.RequireNonNull(sourceNodes, "sourceNodes");
_enumeratorProvider = enumeratorProvider;
_sourceNodes = sourceNodes;
}
public IEnumerable<INode> LazyEnumerate(CancellationToken token)
{
IEnumerator<INode> enumerator = null;
try {
enumerator = _enumeratorProvider.GetEnumerator(_sourceNodes, token);
while (enumerator.MoveNext()) {
yield return enumerator.Current;
}
} finally {
enumerator?.Dispose();
}
}
public void ExecuteEnumerate(CancellationToken token)
{
foreach (INode item in LazyEnumerate(token)) {
INode node = item;
}
}
}
}