ForEachDocument Class
Executes the input documents one at a time against the specified child modules.
Namespace
Statiq.Common
Interfaces
Base Types
graph BT Type-->Base0["ParentModule"] click Base0 "/api/Statiq.Common/ParentModule" Base0-->Base1["Module"] click Base1 "/api/Statiq.Common/Module" Base1-->Base2["object"] Type-.->Interface0["IModule"] click Interface0 "/api/Statiq.Common/IModule" Type-.->Interface1["IEnumerable<IModule>"] Type-.->Interface2["IEnumerable"] Type["ForEachDocument"] class Type type-node

Syntax

public class ForEachDocument : ParentModule, IModule, IEnumerable<IModule>, IEnumerable

Examples

Pipelines.Add("ImageProcessing",
   // ReadFiles will create N new documents with a Stream
    // (but nothing will be read into memory yet)
    ReadFiles(@"images\*"),
    // Each document will be individually sent through the
    // sequence of ForEach child pipelines
    ForEach(
        // This will load the *current* document into memory
        // and perform image manipulations on it
        ImageProcessor()
            //...
            ,
        // and this will save the stream to disk, replacing it with
        // a file stream, thus freeing up memory for the next file
        WriteFiles()
    )
);

Remarks

Normally, documents are executed in a breadth-first traversal where all documents are executed against a module before continuing with the next module. This module allows you to conduct a depth-first traversal instead by executing each document one at a time against the child modules before continuing with the next document. It can be especially helpful when trying to control memory usage for large documents such as images because it lets you move the documents through the pipeline one at a time. The aggregate outputs from each sequence of child modules executed against each document will be output.

Constructors

Name Summary
ForEachDocument(IModule[]) Specifies the modules to execute against the input document one at a time.

Properties

Name Property Type Summary
Children ModuleList
The children of this module.
Inherited from ParentModule

Methods

Name Return Value Summary
Add(IModule[]) void
Adds modules as a child of this module.
Inherited from ParentModule
AfterExecution(IExecutionContext, ExecutionOutputs) void
Called after each module execution.
Inherited from Module
AfterExecutionAsync(IExecutionContext, ExecutionOutputs) Task
Called after each module execution.
Inherited from Module
BeforeExecution(IExecutionContext) void
Called before each module execution.
Inherited from Module
BeforeExecutionAsync(IExecutionContext) Task
Called before each module execution.
Inherited from Module
ExecuteAsync(IExecutionContext) Task<IEnumerable<IDocument>>
This should not be called directly, instead call IExecutionContext.Execute() if you need to execute a module from within another module.
Inherited from Module
ExecuteContextAsync(IExecutionContext) Task<IEnumerable<IDocument>>
Executes the module once for all input documents.
Inherited from Module
ExecuteInputAsync(IDocument, IExecutionContext) Task<IEnumerable<IDocument>>
Executes the module.
Finally(IExecutionContext) void
Called after each module execution, even if an exception is thrown during execution.
Inherited from Module
FinallyAsync(IExecutionContext) Task
Called after each module execution, even if an exception is thrown during execution.
Inherited from Module
GetEnumerator() IEnumerator<IModule>
Inherited from ParentModule

Extension Methods

Name Value Summary
Concat<IModule>(IModule) IEnumerable<T>
ForEachDocument() ForEachDocument
GetNext<IModule>(IModule, IEqualityComparer<IModule>) T
GetNext<IModule>(IModule) T
GetPrevious<IModule>(IModule, IEqualityComparer<IModule>) T
GetPrevious<IModule>(IModule) T
GroupByMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, TElement>, IEqualityComparer<TKey>) IEnumerable<IGrouping<TKey, TElement>>
Groups the elements of a sequence according to a specified key selector function that returns a sequence of keys. The keys are compared by using a comparer and each group's elements are projected by using a specified function.
GroupByMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, TElement>) IEnumerable<IGrouping<TKey, TElement>>
Groups the elements of a sequence according to a specified key selector function that returns a sequence of keys and projects the elements for each group by using a specified function.
GroupByMany<IModule, TKey>(Func<IModule, IEnumerable<TKey>>, IEqualityComparer<TKey>) IEnumerable<IGrouping<TKey, TSource>>
Groups the elements of a sequence according to a specified key selector function that returns a sequence of keys and compares the keys by using a specified comparer.
GroupByMany<IModule, TKey>(Func<IModule, IEnumerable<TKey>>) IEnumerable<IGrouping<TKey, TSource>>
Groups the elements of a sequence according to a specified key selector function that returns a sequence of keys.
GroupByManyToMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, IEnumerable<TElement>>, IEqualityComparer<TKey>) IEnumerable<IGrouping<TKey, TElement>>
Groups the elements of a sequence according to a specified key selector function that returns a sequence of keys. The keys are compared by using a comparer and each group's elements are projected by using a specified function that returns a sequence of elements.
GroupByManyToMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, IEnumerable<TElement>>) IEnumerable<IGrouping<TKey, TElement>>
Groups the elements of a sequence according to a specified key selector function that returns a sequence of keys and projects the elements for each group by using a specified function that returns a sequence of elements.
ParallelForEachAsync<IModule>(Func<IModule, Task>, CancellationToken) Task
ParallelSelectAsync<IModule, TResult>(Func<IModule, Task<TResult>>, CancellationToken) Task<IEnumerable<TResult>>
Invokes an async selector in parallel.
ParallelSelectManyAsync<IModule, TResult>(Func<IModule, Task<IEnumerable<TResult>>>, CancellationToken) Task<IEnumerable<TResult>>
Invokes an async selector that returns multiple results in parallel.
ParallelWhereAsync<IModule>(Func<IModule, Task<bool>>, CancellationToken) Task<IEnumerable<TSource>>
StartsWith<IModule>(IEnumerable<IModule>, IEqualityComparer<IModule>) bool
Determines whether the items starts with the specified values.
StartsWith<IModule>(IEnumerable<IModule>) bool
Determines whether the items starts with the specified values.
ThrowIfNull<ForEachDocument>(string) T
ToDocument<ForEachDocument>(IContentProvider) IDocument
ToDocument<ForEachDocument>(IEnumerable<KeyValuePair<string, object>>, IContentProvider) IDocument
ToDocument<ForEachDocument>(NormalizedPath, IContentProvider) IDocument
ToDocument<ForEachDocument>(NormalizedPath, IEnumerable<KeyValuePair<string, object>>, IContentProvider) IDocument
ToDocument<ForEachDocument>(NormalizedPath, NormalizedPath, IContentProvider) IDocument
ToDocument<ForEachDocument>(NormalizedPath, NormalizedPath, IEnumerable<KeyValuePair<string, object>>, IContentProvider) IDocument
ToDocuments<IModule>(Func<IModule, IContentProvider>) IEnumerable<IDocument>
ToDocuments<IModule>(Func<IModule, IEnumerable<KeyValuePair<string, object>>>, Func<IModule, IContentProvider>) IEnumerable<IDocument>
ToDocuments<IModule>(Func<IModule, NormalizedPath>, Func<IModule, IContentProvider>) IEnumerable<IDocument>
ToDocuments<IModule>(Func<IModule, NormalizedPath>, Func<IModule, IEnumerable<KeyValuePair<string, object>>>, Func<IModule, IContentProvider>) IEnumerable<IDocument>
ToDocuments<IModule>(Func<IModule, NormalizedPath>, Func<IModule, NormalizedPath>, Func<IModule, IContentProvider>) IEnumerable<IDocument>
ToDocuments<IModule>(Func<IModule, NormalizedPath>, Func<IModule, NormalizedPath>, Func<IModule, IEnumerable<KeyValuePair<string, object>>>, Func<IModule, IContentProvider>) IEnumerable<IDocument>
ToLookupMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, TElement>, IEqualityComparer<TKey>) ILookup<TKey, TElement>
Creates a lookup from a sequence according to a specified key selector function that returns a sequence of keys. The keys are compared by using a comparer and each group's elements are projected by using a specified function.
ToLookupMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, TElement>) ILookup<TKey, TElement>
Creates a lookup from a sequence according to a specified key selector function that returns a sequence of keys and projects the elements for each group by using a specified function.
ToLookupMany<IModule, TKey>(Func<IModule, IEnumerable<TKey>>, IEqualityComparer<TKey>) ILookup<TKey, TSource>
Creates a lookup from a sequence according to a specified key selector function that returns a sequence of keys and compares the keys by using a specified comparer.
ToLookupMany<IModule, TKey>(Func<IModule, IEnumerable<TKey>>) ILookup<TKey, TSource>
Creates a lookup from a sequence according to a specified key selector function that returns a sequence of keys.
ToLookupManyToMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, IEnumerable<TElement>>, IEqualityComparer<TKey>) ILookup<TKey, TElement>
Creates a lookup from a sequence according to a specified key selector function that returns a sequence of keys. The keys are compared by using a comparer and each group's elements are projected by using a specified function that returns a sequence of elements.
ToLookupManyToMany<IModule, TKey, TElement>(Func<IModule, IEnumerable<TKey>>, Func<IModule, IEnumerable<TElement>>) ILookup<TKey, TElement>
Creates a lookup from a sequence according to a specified key selector function that returns a sequence of keys and projects the elements for each group by using a specified function that returns a sequence of elements.
ToStringTable<IModule>(string[], Func<IModule, object>[]) string
WithChildren<ForEachDocument>(IEnumerable<IModule>) TModule
WithChildren<ForEachDocument>(IModule[]) TModule