Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/thomasbleijendaal/tplpipeline

Dataflow based batched pipeline
https://github.com/thomasbleijendaal/tplpipeline

Last synced: about 6 hours ago
JSON representation

Dataflow based batched pipeline

Awesome Lists containing this project

README

        

# TPL Pipeline

A TPL Dataflow based pipeline with job based tracking.

## Example

### Pipeline layout

```
[Start]
|
|
[Download]
|_____________________
| |
| Condition | Condition
| |
[Merge files] [Save as image]
| |
| |
[Save file] |
|_____________________|
|
[Finish]
```

### Pipeline class
```
public class Pipeline : BasePipeline
{
TransformManyBlock> PipelineBegin;
TransformBlock, IPipelineJobElement> DownloadBlock;
TransformBlock>, IPipelineJobElement> MergeBlock;
TransformBlock, IPipelineJobElement> DiskWriteBlock;
TransformBlock, IPipelineJobElement> ImageBlock;
ActionBlock>> FinishBlock;

public Pipeline()
{
public Pipeline()
{
PipelineBegin = StartBlock();

DownloadBlock = TransformBlock(
async (job, request) =>
{
[..]
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 25 });

MergeBlock = MergeTransformBlock(
(job, byteArrays) =>
{
[..]
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 5 });

DiskWriteBlock = TransformBlock(
async (job, data) =>
{
[..]
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 1 });

ImageBlock = TransformBlock(
async (job, data) =>
{
[..]
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 1 });

FinishBlock = ActionBlock>(
(job, flags) =>
{
[..]
}, true);

PipelineBegin.LinkTo(DownloadBlock);

DownloadBlock.LinkTo(MergeBlock, e => e.Properties["Type"] == "Website");
DownloadBlock.LinkTo(ImageBlock, e => e.Properties["Type"] == "Thumbnail");

MergeBlock.LinkTo(DiskWriteBlock);

FinishBlock.LinkFrom(DiskWriteBlock, ImageBlock);

}
}
```

### Job class
```
public class Job : BaseJob
{
public Job() : base()
{

}

public override void OnJobStart()
{
Console.WriteLine("Job started");
}

public override void OnJobComplete()
{
Console.WriteLine("Job completed");
}
}
```