コード例 #1
0
        internal static Task AddColourAsync(BlockingCollection <Info> input, BlockingCollection <Info> output)
        {
            return(Task.Run(() =>
            {
                foreach (var item in input.GetConsumingEnumerable())
                {
                    if (item.Count > 100)
                    {
                        item.Colour = ConsoleColor.Red.ToString();
                    }
                    else if (item.Count > 50)
                    {
                        item.Colour = ConsoleColor.DarkYellow.ToString();
                    }
                    else if (item.Count > 25)
                    {
                        item.Colour = ConsoleColor.Green.ToString();
                    }
                    else
                    {
                        item.Colour = ConsoleColor.White.ToString();
                    }

                    output.Add(item);
                    ConsHelper.WriteLine($"Stage 5: Added Colour {item.Colour} to {item}");
                }
                output.CompleteAdding();
            }));
        }
コード例 #2
0
        private static async void StartPipeline()
        {
            var fName         = new BlockingCollection <string>();
            var lines         = new BlockingCollection <string>();
            var words         = new ConcurrentDictionary <string, int>();
            var items         = new BlockingCollection <Info>();
            var colouredItems = new BlockingCollection <Info>();

            Task s1 = PipelineStage.ReadFileNameAsync(@"../../..", fName);

            ConsHelper.WriteLine($"Started Stage 1");
            Task s2 = PipelineStage.LoadContentAsync(fName, lines);

            ConsHelper.WriteLine($"Started Stage 2");
            Task s3 = PipelineStage.ProcessContentAsync(lines, words);

            ConsHelper.WriteLine($"Started Stage 3");
            await Task.WhenAll(s1, s2, s3);

            ConsHelper.WriteLine("All stages 1,2,3 have completed");
            Task t4 = PipelineStage.TransferContentAsync(words, items);
            Task t5 = PipelineStage.AddColourAsync(items, colouredItems);
            await Task.WhenAll(t4, t5);

            ConsHelper.WriteLine("Stages 4 and 5 completed.");
            Task tf = PipelineStage.ShowContentAsync(colouredItems);

            Cons.ReadKey();
        }
コード例 #3
0
 internal static Task ShowContentAsync(BlockingCollection <Info> info)
 {
     return(Task.Run(() =>
     {
         foreach (var i in info.GetConsumingEnumerable())
         {
             ConsHelper.WriteLine($"Final Stage: {i}", i.Colour);
         }
     }));
 }
コード例 #4
0
        internal static Task ReadFileNameAsync(string path, BlockingCollection <string> fName)
        {
            return(Task.Run(async() => {
                foreach (string fileName in Directory.EnumerateFiles(path, "*.cs", SearchOption.AllDirectories))
                {
                    fName.Add(fileName);
                    ConsHelper.WriteLine($"Stage 1: Added {fileName}");
                }

                fName.CompleteAdding();
            }
                            ));
        }
コード例 #5
0
 internal static Task ProcessContentAsync(BlockingCollection <string> lines, ConcurrentDictionary <string, int> words)
 {
     return(Task.Run(() =>
     {
         foreach (var l in lines.GetConsumingEnumerable())
         {
             string[] wrds = l.Split(' ', ';', '\t', '{', '}', '(', ')', ':', ',', '"');
             foreach (var w in wrds.Where(w => !string.IsNullOrEmpty(w)))
             {
                 words.AddOrIncrementValue(w);
                 ConsHelper.WriteLine($"Stage 3: Added {w}");
             }
         }
     }));
 }
コード例 #6
0
        internal static Task TransferContentAsync(ConcurrentDictionary <string, int> input, BlockingCollection <Info> output)
        {
            return(Task.Run(() =>
            {
                foreach (var word in input.Keys)
                {
                    int value;
                    if (input.TryGetValue(word, out value))
                    {
                        var info = new Info {
                            Word = word, Count = value
                        };
                        output.Add(info);
                        ConsHelper.WriteLine($"Stage 4: Added {info}");
                    }
                }

                output.CompleteAdding();
            }));
        }
コード例 #7
0
        internal static Task LoadContentAsync(BlockingCollection <string> fName, BlockingCollection <string> lines)
        {
            return(Task.Run(async() =>
            {
                foreach (var f in fName.GetConsumingEnumerable())
                {
                    using (FileStream stream = File.OpenRead(f))
                    {
                        var reader = new StreamReader(stream);
                        string line = null;
                        while ((line = await reader.ReadLineAsync()) != null)
                        {
                            lines.Add(line);
                            ConsHelper.WriteLine($"Stage 2: Added {line}");
                        }
                    }
                }

                lines.CompleteAdding();
            }));
        }