in src/PSRule.Rules.Azure/Pipeline/ResourceDataPipeline.cs [233:261]
private void ExpandResource(int poolSize)
{
var context = new ResourceExportContext(Context, _Resources, TokenCache, _RetryCount, _RetryInterval);
var visitor = new ResourceExportVisitor();
var pool = new Task[poolSize];
for (var i = 0; i < poolSize; i++)
{
pool[i] = Task.Run(async () =>
{
while (!_Resources.IsEmpty && _Resources.TryDequeue(out var r))
{
context.VerboseExpandingResource(r[PROPERTY_ID].Value<string>());
try
{
await visitor.VisitAsync(context, r);
_Output.Enqueue(r);
}
catch (Exception ex)
{
context.Error(ex, ERRORID_RESOURCEDATAEXPAND);
}
}
});
}
context.Wait();
Task.WaitAll(pool);
context.Flush();
pool.DisposeAll();
}