public void Run(string uri) { // Declaration of all the pipeline blocks GetTopStoriesBlock getTopStories = new GetTopStoriesBlock(); FilterTopStoriesBlock filterTopStories = new FilterTopStoriesBlock(); TraverseTopStoriesCommentsBlock traverseTopStoriesComments = new TraverseTopStoriesCommentsBlock(); ComputeTopCommentsPerStoryBlock computeTopCommentsPerStory = new ComputeTopCommentsPerStoryBlock(); // Links and interactions betwen each block getTopStories.block.LinkTo(filterTopStories.block, this.linkOptions); filterTopStories.bufferBlock.LinkTo(traverseTopStoriesComments.block, linkOptions); traverseTopStoriesComments.bufferBlock.LinkTo(computeTopCommentsPerStory.block, linkOptions); // Triggering the start of the pipeline getTopStories.block.Post(uri); getTopStories.block.Complete(); // Buffer at the end of the pipeline var receiveAllStories = Task.Run(() => { for (int i = 0; i <= Constants.NBSTORIES; i++) { this.topStories.Add(computeTopCommentsPerStory.bufferBlock.Receive()); // Wait for all the Top Story objects to arrive } }); Task.WaitAll(receiveAllStories); computeTopCommentsPerStory.bufferBlock.Complete(); //End of the pipeline commentsRegistry = traverseTopStoriesComments.commentsRegistry; printResults(); }
public void ComputeTopCommentsPerStoryBlock() { ConcurrentDictionary <string, int> comments = new ConcurrentDictionary <string, int>(); comments.TryAdd("a", 1); comments.TryAdd("b", 2); comments.TryAdd("c", 3); comments.TryAdd("d", 4); comments.TryAdd("e", 5); comments.TryAdd("f", 6); comments.TryAdd("g", 7); comments.TryAdd("h", 8); comments.TryAdd("i", 9); comments.TryAdd("j", 10); comments.TryAdd("k", 11); comments.TryAdd("l", 12); TopStory topStory = new TopStory("US takes 'richest nation on earth' crown from Switzerland", comments); ComputeTopCommentsPerStoryBlock traverseTopStoriesComments = new ComputeTopCommentsPerStoryBlock(); traverseTopStoriesComments.block.Post(topStory); var topStoryWithTopComments = traverseTopStoriesComments.bufferBlock.ReceiveAsync().Result; Assert.IsNotNull(topStoryWithTopComments.TopComments); Assert.AreEqual(topStoryWithTopComments.TopComments.Count, Constants.NBOFCOMMENTERS); }