示例#1
0
        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);
        }