Trying to build a simple Pipe and FilterIs there a simple, elegant way to define singletons?Concatenate NULL and string in Linq to entities queryTry-catch speeding up my code?Can use interfaces in creating my models in Entity Framework Codefirst?NHibernate rises NHibernate.HibernateException : Could not find named connectionPopulating EXT JS Store in a EXT form PanelWhat is the best way to load data to the following structure from database?DevExpress MVC GridView-Missing values after update when not all properties added to columnsStoring TextBox input to an arrayDynamic “pipes and filters” or “decorator”

Should I disclose a colleague's illness (that I should not know) when others badmouth him

How to use Palladio font in text body but Computer Modern for Equations?

Does the unit of measure matter when you are solving for the diameter of a circumference?

Plot twist where the antagonist wins

Why do Ryanair allow me to book connecting itineraries through a third party, but not through their own website?

What are the real benefits of using Salesforce DX?

Employer demanding to see degree after poor code review

Is there a way to make it so the cursor is included when I prtscr key?

Is CD audio quality good enough?

Construct a word ladder

Were pens caps holes designed to prevent death by suffocation if swallowed?

Is the field of q-series 'dead'?

In general, would I need to season a meat when making a sauce?

Which is the common name of Mind Flayers?

Would Brexit have gone ahead by now if Gina Miller had not forced the Government to involve Parliament?

Would jet fuel for an F-16 or F-35 be producible during WW2?

When and what was the first 3D acceleration device ever released?

What does this symbol on the box of power supply mean?

Is it possible to play as a necromancer skeleton?

Simple fuzz pedal using breadboard

Why were helmets and other body armour not commonplace in the 1800s?

Compactness of finite sets

Computing the matrix powers of a non-diagonalizable matrix

Are these reasonable traits for someone with autism?



Trying to build a simple Pipe and Filter


Is there a simple, elegant way to define singletons?Concatenate NULL and string in Linq to entities queryTry-catch speeding up my code?Can use interfaces in creating my models in Entity Framework Codefirst?NHibernate rises NHibernate.HibernateException : Could not find named connectionPopulating EXT JS Store in a EXT form PanelWhat is the best way to load data to the following structure from database?DevExpress MVC GridView-Missing values after update when not all properties added to columnsStoring TextBox input to an arrayDynamic “pipes and filters” or “decorator”






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















I am trying to implement the Pipe and Filter pattern integrating TPL Dataflow within it. I am having issues where not all my results are churned out. For example, i put 99999 items into the pipeline and only 85238 came out.



EmployeeModel.cs



public class EmployeeModel


public String FirstName get; set;

public String LastName get; set;

public String FullName get; set;

public override String ToString()

return $"FirstName: FirstNamenLastName: LastNamenFullName: FullNamen";




IFilter.cs



public interface IFilter<T>

T Execute(T input);



AbstractParallelFilter.cs



public abstract class AbstractParallelFilter<T> : IFilter<T>

public AbstractParallelFilter()

TransformBlock = new TransformBlock<T, T>(new Func<T, T>(Execute), new ExecutionDataflowBlockOptions()

BoundedCapacity = DataflowBlockOptions.Unbounded,
MaxDegreeOfParallelism = Environment.ProcessorCount

);



public abstract T Execute(T input);

internal TransformBlock<T, T> TransformBlock get; private set;



IParallelPipeline.cs



public interface IParallelPipeline<T>


IParallelPipeline<T> Register(AbstractParallelFilter<T> filter);

IParallelPipeline<T> CompleteRegisteration();

IParallelPipeline<T> Process(T input);

Task CompleteProcessing();


ConcurrentBag<T> Results get; set;



AbstractParallelPipeline.cs



public abstract class AbstractParallelPipeline<T>: IParallelPipeline<T>


public AbstractParallelPipeline()

filters = new List<AbstractParallelFilter<T>>();

Results = new ConcurrentBag<T>();


public IParallelPipeline<T> Register(AbstractParallelFilter<T> filter)

filters.Add(filter);
return this;


public abstract IParallelPipeline<T> Process(T input);

public Task CompleteProcessing()

if (filters.Count == 0)
throw new Exception("No filters have been registered");

filters.First().TransformBlock.Complete();

return filters.Last().TransformBlock.Completion;


public IParallelPipeline<T> CompleteRegisteration()

if (filters.Count < 2)

return this;

else

for (int i = filters.Count - 2; i >= 0; i--)

filters[i].TransformBlock.LinkTo(filters[i + 1].TransformBlock, new DataflowLinkOptions() PropagateCompletion = true );


ActionBlock<T> dumpBlock = new ActionBlock<T>(x => Results.Add(x));
filters.Last().TransformBlock.LinkTo(dumpBlock, new DataflowLinkOptions() PropagateCompletion = true );


return this;


public IList<AbstractParallelFilter<T>> filters;

public ConcurrentBag<T> Results get; set;



ParallelPipeline.cs



public class ParallelPipeline<T> : AbstractParallelPipeline<T>

public override IParallelPipeline<T> Process(T input)

filters.First().TransformBlock.Post(input);
return this;




Program.cs



class Program

static void Main(string[] args)

List<EmployeeModel> employeeModels = new List<EmployeeModel>();
int count = 99999;

for (int i = 0; i < count; i++)

EmployeeModel employee = new EmployeeModel()

FirstName = NameGenerator.GenerateFirstName(Gender.Female),
LastName = NameGenerator.GenerateLastName()
;
employeeModels.Add(employee);


IParallelPipeline<EmployeeModel> parallelPipeline = new ParallelPipeline<EmployeeModel>()
.Register(new ParallelFirstNameToUpperFilter())
.Register(new ParallelLastNameToUpperFilter())
.Register(new ParallelFullNameConcatFilter())
.CompleteRegisteration();

for (int i = 0; i < count; i++)

parallelPipeline.Process(employeeModels[i]);

parallelPipeline
.CompleteProcessing()
.Wait();


Console.WriteLine(parallelPipeline.Results.Count);

Console.Read();











share|improve this question






















  • You are registering 3 filters in parallelPipeline, what do they do? and what does NameGenerator do?

    – Peter Bons
    Mar 24 at 6:40











  • It just touppers() the property. I just narrowed down the problem. I need to threadsleep awhile before i enumerate the results. Seems like concurrentbag was not fully ready adding all the items to the list. Is there a way to know if concurrentbag is ready? Or is there a better data structure to use?

    – RStyle
    Mar 24 at 6:54

















1















I am trying to implement the Pipe and Filter pattern integrating TPL Dataflow within it. I am having issues where not all my results are churned out. For example, i put 99999 items into the pipeline and only 85238 came out.



EmployeeModel.cs



public class EmployeeModel


public String FirstName get; set;

public String LastName get; set;

public String FullName get; set;

public override String ToString()

return $"FirstName: FirstNamenLastName: LastNamenFullName: FullNamen";




IFilter.cs



public interface IFilter<T>

T Execute(T input);



AbstractParallelFilter.cs



public abstract class AbstractParallelFilter<T> : IFilter<T>

public AbstractParallelFilter()

TransformBlock = new TransformBlock<T, T>(new Func<T, T>(Execute), new ExecutionDataflowBlockOptions()

BoundedCapacity = DataflowBlockOptions.Unbounded,
MaxDegreeOfParallelism = Environment.ProcessorCount

);



public abstract T Execute(T input);

internal TransformBlock<T, T> TransformBlock get; private set;



IParallelPipeline.cs



public interface IParallelPipeline<T>


IParallelPipeline<T> Register(AbstractParallelFilter<T> filter);

IParallelPipeline<T> CompleteRegisteration();

IParallelPipeline<T> Process(T input);

Task CompleteProcessing();


ConcurrentBag<T> Results get; set;



AbstractParallelPipeline.cs



public abstract class AbstractParallelPipeline<T>: IParallelPipeline<T>


public AbstractParallelPipeline()

filters = new List<AbstractParallelFilter<T>>();

Results = new ConcurrentBag<T>();


public IParallelPipeline<T> Register(AbstractParallelFilter<T> filter)

filters.Add(filter);
return this;


public abstract IParallelPipeline<T> Process(T input);

public Task CompleteProcessing()

if (filters.Count == 0)
throw new Exception("No filters have been registered");

filters.First().TransformBlock.Complete();

return filters.Last().TransformBlock.Completion;


public IParallelPipeline<T> CompleteRegisteration()

if (filters.Count < 2)

return this;

else

for (int i = filters.Count - 2; i >= 0; i--)

filters[i].TransformBlock.LinkTo(filters[i + 1].TransformBlock, new DataflowLinkOptions() PropagateCompletion = true );


ActionBlock<T> dumpBlock = new ActionBlock<T>(x => Results.Add(x));
filters.Last().TransformBlock.LinkTo(dumpBlock, new DataflowLinkOptions() PropagateCompletion = true );


return this;


public IList<AbstractParallelFilter<T>> filters;

public ConcurrentBag<T> Results get; set;



ParallelPipeline.cs



public class ParallelPipeline<T> : AbstractParallelPipeline<T>

public override IParallelPipeline<T> Process(T input)

filters.First().TransformBlock.Post(input);
return this;




Program.cs



class Program

static void Main(string[] args)

List<EmployeeModel> employeeModels = new List<EmployeeModel>();
int count = 99999;

for (int i = 0; i < count; i++)

EmployeeModel employee = new EmployeeModel()

FirstName = NameGenerator.GenerateFirstName(Gender.Female),
LastName = NameGenerator.GenerateLastName()
;
employeeModels.Add(employee);


IParallelPipeline<EmployeeModel> parallelPipeline = new ParallelPipeline<EmployeeModel>()
.Register(new ParallelFirstNameToUpperFilter())
.Register(new ParallelLastNameToUpperFilter())
.Register(new ParallelFullNameConcatFilter())
.CompleteRegisteration();

for (int i = 0; i < count; i++)

parallelPipeline.Process(employeeModels[i]);

parallelPipeline
.CompleteProcessing()
.Wait();


Console.WriteLine(parallelPipeline.Results.Count);

Console.Read();











share|improve this question






















  • You are registering 3 filters in parallelPipeline, what do they do? and what does NameGenerator do?

    – Peter Bons
    Mar 24 at 6:40











  • It just touppers() the property. I just narrowed down the problem. I need to threadsleep awhile before i enumerate the results. Seems like concurrentbag was not fully ready adding all the items to the list. Is there a way to know if concurrentbag is ready? Or is there a better data structure to use?

    – RStyle
    Mar 24 at 6:54













1












1








1








I am trying to implement the Pipe and Filter pattern integrating TPL Dataflow within it. I am having issues where not all my results are churned out. For example, i put 99999 items into the pipeline and only 85238 came out.



EmployeeModel.cs



public class EmployeeModel


public String FirstName get; set;

public String LastName get; set;

public String FullName get; set;

public override String ToString()

return $"FirstName: FirstNamenLastName: LastNamenFullName: FullNamen";




IFilter.cs



public interface IFilter<T>

T Execute(T input);



AbstractParallelFilter.cs



public abstract class AbstractParallelFilter<T> : IFilter<T>

public AbstractParallelFilter()

TransformBlock = new TransformBlock<T, T>(new Func<T, T>(Execute), new ExecutionDataflowBlockOptions()

BoundedCapacity = DataflowBlockOptions.Unbounded,
MaxDegreeOfParallelism = Environment.ProcessorCount

);



public abstract T Execute(T input);

internal TransformBlock<T, T> TransformBlock get; private set;



IParallelPipeline.cs



public interface IParallelPipeline<T>


IParallelPipeline<T> Register(AbstractParallelFilter<T> filter);

IParallelPipeline<T> CompleteRegisteration();

IParallelPipeline<T> Process(T input);

Task CompleteProcessing();


ConcurrentBag<T> Results get; set;



AbstractParallelPipeline.cs



public abstract class AbstractParallelPipeline<T>: IParallelPipeline<T>


public AbstractParallelPipeline()

filters = new List<AbstractParallelFilter<T>>();

Results = new ConcurrentBag<T>();


public IParallelPipeline<T> Register(AbstractParallelFilter<T> filter)

filters.Add(filter);
return this;


public abstract IParallelPipeline<T> Process(T input);

public Task CompleteProcessing()

if (filters.Count == 0)
throw new Exception("No filters have been registered");

filters.First().TransformBlock.Complete();

return filters.Last().TransformBlock.Completion;


public IParallelPipeline<T> CompleteRegisteration()

if (filters.Count < 2)

return this;

else

for (int i = filters.Count - 2; i >= 0; i--)

filters[i].TransformBlock.LinkTo(filters[i + 1].TransformBlock, new DataflowLinkOptions() PropagateCompletion = true );


ActionBlock<T> dumpBlock = new ActionBlock<T>(x => Results.Add(x));
filters.Last().TransformBlock.LinkTo(dumpBlock, new DataflowLinkOptions() PropagateCompletion = true );


return this;


public IList<AbstractParallelFilter<T>> filters;

public ConcurrentBag<T> Results get; set;



ParallelPipeline.cs



public class ParallelPipeline<T> : AbstractParallelPipeline<T>

public override IParallelPipeline<T> Process(T input)

filters.First().TransformBlock.Post(input);
return this;




Program.cs



class Program

static void Main(string[] args)

List<EmployeeModel> employeeModels = new List<EmployeeModel>();
int count = 99999;

for (int i = 0; i < count; i++)

EmployeeModel employee = new EmployeeModel()

FirstName = NameGenerator.GenerateFirstName(Gender.Female),
LastName = NameGenerator.GenerateLastName()
;
employeeModels.Add(employee);


IParallelPipeline<EmployeeModel> parallelPipeline = new ParallelPipeline<EmployeeModel>()
.Register(new ParallelFirstNameToUpperFilter())
.Register(new ParallelLastNameToUpperFilter())
.Register(new ParallelFullNameConcatFilter())
.CompleteRegisteration();

for (int i = 0; i < count; i++)

parallelPipeline.Process(employeeModels[i]);

parallelPipeline
.CompleteProcessing()
.Wait();


Console.WriteLine(parallelPipeline.Results.Count);

Console.Read();











share|improve this question














I am trying to implement the Pipe and Filter pattern integrating TPL Dataflow within it. I am having issues where not all my results are churned out. For example, i put 99999 items into the pipeline and only 85238 came out.



EmployeeModel.cs



public class EmployeeModel


public String FirstName get; set;

public String LastName get; set;

public String FullName get; set;

public override String ToString()

return $"FirstName: FirstNamenLastName: LastNamenFullName: FullNamen";




IFilter.cs



public interface IFilter<T>

T Execute(T input);



AbstractParallelFilter.cs



public abstract class AbstractParallelFilter<T> : IFilter<T>

public AbstractParallelFilter()

TransformBlock = new TransformBlock<T, T>(new Func<T, T>(Execute), new ExecutionDataflowBlockOptions()

BoundedCapacity = DataflowBlockOptions.Unbounded,
MaxDegreeOfParallelism = Environment.ProcessorCount

);



public abstract T Execute(T input);

internal TransformBlock<T, T> TransformBlock get; private set;



IParallelPipeline.cs



public interface IParallelPipeline<T>


IParallelPipeline<T> Register(AbstractParallelFilter<T> filter);

IParallelPipeline<T> CompleteRegisteration();

IParallelPipeline<T> Process(T input);

Task CompleteProcessing();


ConcurrentBag<T> Results get; set;



AbstractParallelPipeline.cs



public abstract class AbstractParallelPipeline<T>: IParallelPipeline<T>


public AbstractParallelPipeline()

filters = new List<AbstractParallelFilter<T>>();

Results = new ConcurrentBag<T>();


public IParallelPipeline<T> Register(AbstractParallelFilter<T> filter)

filters.Add(filter);
return this;


public abstract IParallelPipeline<T> Process(T input);

public Task CompleteProcessing()

if (filters.Count == 0)
throw new Exception("No filters have been registered");

filters.First().TransformBlock.Complete();

return filters.Last().TransformBlock.Completion;


public IParallelPipeline<T> CompleteRegisteration()

if (filters.Count < 2)

return this;

else

for (int i = filters.Count - 2; i >= 0; i--)

filters[i].TransformBlock.LinkTo(filters[i + 1].TransformBlock, new DataflowLinkOptions() PropagateCompletion = true );


ActionBlock<T> dumpBlock = new ActionBlock<T>(x => Results.Add(x));
filters.Last().TransformBlock.LinkTo(dumpBlock, new DataflowLinkOptions() PropagateCompletion = true );


return this;


public IList<AbstractParallelFilter<T>> filters;

public ConcurrentBag<T> Results get; set;



ParallelPipeline.cs



public class ParallelPipeline<T> : AbstractParallelPipeline<T>

public override IParallelPipeline<T> Process(T input)

filters.First().TransformBlock.Post(input);
return this;




Program.cs



class Program

static void Main(string[] args)

List<EmployeeModel> employeeModels = new List<EmployeeModel>();
int count = 99999;

for (int i = 0; i < count; i++)

EmployeeModel employee = new EmployeeModel()

FirstName = NameGenerator.GenerateFirstName(Gender.Female),
LastName = NameGenerator.GenerateLastName()
;
employeeModels.Add(employee);


IParallelPipeline<EmployeeModel> parallelPipeline = new ParallelPipeline<EmployeeModel>()
.Register(new ParallelFirstNameToUpperFilter())
.Register(new ParallelLastNameToUpperFilter())
.Register(new ParallelFullNameConcatFilter())
.CompleteRegisteration();

for (int i = 0; i < count; i++)

parallelPipeline.Process(employeeModels[i]);

parallelPipeline
.CompleteProcessing()
.Wait();


Console.WriteLine(parallelPipeline.Results.Count);

Console.Read();








c# design-patterns task-parallel-library






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 24 at 5:39









RStyleRStyle

439623




439623












  • You are registering 3 filters in parallelPipeline, what do they do? and what does NameGenerator do?

    – Peter Bons
    Mar 24 at 6:40











  • It just touppers() the property. I just narrowed down the problem. I need to threadsleep awhile before i enumerate the results. Seems like concurrentbag was not fully ready adding all the items to the list. Is there a way to know if concurrentbag is ready? Or is there a better data structure to use?

    – RStyle
    Mar 24 at 6:54

















  • You are registering 3 filters in parallelPipeline, what do they do? and what does NameGenerator do?

    – Peter Bons
    Mar 24 at 6:40











  • It just touppers() the property. I just narrowed down the problem. I need to threadsleep awhile before i enumerate the results. Seems like concurrentbag was not fully ready adding all the items to the list. Is there a way to know if concurrentbag is ready? Or is there a better data structure to use?

    – RStyle
    Mar 24 at 6:54
















You are registering 3 filters in parallelPipeline, what do they do? and what does NameGenerator do?

– Peter Bons
Mar 24 at 6:40





You are registering 3 filters in parallelPipeline, what do they do? and what does NameGenerator do?

– Peter Bons
Mar 24 at 6:40













It just touppers() the property. I just narrowed down the problem. I need to threadsleep awhile before i enumerate the results. Seems like concurrentbag was not fully ready adding all the items to the list. Is there a way to know if concurrentbag is ready? Or is there a better data structure to use?

– RStyle
Mar 24 at 6:54





It just touppers() the property. I just narrowed down the problem. I need to threadsleep awhile before i enumerate the results. Seems like concurrentbag was not fully ready adding all the items to the list. Is there a way to know if concurrentbag is ready? Or is there a better data structure to use?

– RStyle
Mar 24 at 6:54












1 Answer
1






active

oldest

votes


















1














Ok found the newbie bug, during CompleteProcessing(), I need to return my ActionBlock instead of my TransformBlock as the ActionBlock is the last block.






share|improve this answer























  • Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

    – Peter Bons
    Mar 24 at 7:10











  • By the way, having just one filter messed things up. It did not complete at all

    – Peter Bons
    Mar 24 at 7:55











  • Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

    – RStyle
    Mar 24 at 9:36











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55321046%2ftrying-to-build-a-simple-pipe-and-filter%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














Ok found the newbie bug, during CompleteProcessing(), I need to return my ActionBlock instead of my TransformBlock as the ActionBlock is the last block.






share|improve this answer























  • Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

    – Peter Bons
    Mar 24 at 7:10











  • By the way, having just one filter messed things up. It did not complete at all

    – Peter Bons
    Mar 24 at 7:55











  • Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

    – RStyle
    Mar 24 at 9:36















1














Ok found the newbie bug, during CompleteProcessing(), I need to return my ActionBlock instead of my TransformBlock as the ActionBlock is the last block.






share|improve this answer























  • Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

    – Peter Bons
    Mar 24 at 7:10











  • By the way, having just one filter messed things up. It did not complete at all

    – Peter Bons
    Mar 24 at 7:55











  • Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

    – RStyle
    Mar 24 at 9:36













1












1








1







Ok found the newbie bug, during CompleteProcessing(), I need to return my ActionBlock instead of my TransformBlock as the ActionBlock is the last block.






share|improve this answer













Ok found the newbie bug, during CompleteProcessing(), I need to return my ActionBlock instead of my TransformBlock as the ActionBlock is the last block.







share|improve this answer












share|improve this answer



share|improve this answer










answered Mar 24 at 7:02









RStyleRStyle

439623




439623












  • Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

    – Peter Bons
    Mar 24 at 7:10











  • By the way, having just one filter messed things up. It did not complete at all

    – Peter Bons
    Mar 24 at 7:55











  • Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

    – RStyle
    Mar 24 at 9:36

















  • Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

    – Peter Bons
    Mar 24 at 7:10











  • By the way, having just one filter messed things up. It did not complete at all

    – Peter Bons
    Mar 24 at 7:55











  • Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

    – RStyle
    Mar 24 at 9:36
















Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

– Peter Bons
Mar 24 at 7:10





Yeah, just wanted to write that as the answer. Hard to spot but nice you found it.

– Peter Bons
Mar 24 at 7:10













By the way, having just one filter messed things up. It did not complete at all

– Peter Bons
Mar 24 at 7:55





By the way, having just one filter messed things up. It did not complete at all

– Peter Bons
Mar 24 at 7:55













Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

– RStyle
Mar 24 at 9:36





Oh yes! And I wonder why the synchronous one is faster than the parallel one. If you do know why let me know. Else will put up another question tomorrow haha. Thanks for your help man

– RStyle
Mar 24 at 9:36



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55321046%2ftrying-to-build-a-simple-pipe-and-filter%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript