コード例 #1
0
        public TransformBlock <List <CustomerTextData>, List <CustomerTextData> > Filter(int minimumSymbols)
        {
            var filterBlock = new TransformBlock <List <CustomerTextData>, List <CustomerTextData> >(textDataList =>
            {
                var filter = new FilterTextData(minimumSymbols);
                return(textDataList.Where(filter.Run).ToList());
            });

            flow.Add(filterBlock);
            return(filterBlock);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: constructor-igor/TechSugar
        static public void ProcessingByTPL_StraightForwardImplementation()
        {
            const string pathToFiles = @"..\..\..\..\DataFiles";
            string[] files = Directory.GetFiles(pathToFiles, "*.txt", SearchOption.AllDirectories);

            var loadDataFromFileBlock = new TransformBlock<string[], List<CustomerTextData>>(fileItems =>
            {
                var factory = new CustomerTextDataFactory();
                return new List<CustomerTextData>(Array.ConvertAll(fileItems, factory.LoadFromFile));
            });
            var filterBlock = new TransformBlock<List<CustomerTextData>, List<CustomerTextData>>(textDataList =>
            {
                var filter = new FilterTextData(5);
                return textDataList.Where(filter.Run).ToList();
            });
            var toListBlock = new TransformManyBlock<List<CustomerTextData>, CustomerTextData>(textDataList =>
            {
                var queue = new ConcurrentQueue<CustomerTextData>();
                textDataList.ForEach(queue.Enqueue);
                return queue;
            });
            var action = new ActionBlock<CustomerTextData>(textData =>
            {
                var weight = new WeightTextData();
                int result = weight.Run(textData);
                Trace.WriteLine(result);
                Console.WriteLine(result);
            });

            loadDataFromFileBlock.LinkTo(filterBlock);
            filterBlock.LinkTo(toListBlock);
            toListBlock.LinkTo(action);

            loadDataFromFileBlock.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted) ((IDataflowBlock)filterBlock).Fault(t.Exception);
                else filterBlock.Complete();
            });
            filterBlock.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted) ((IDataflowBlock)toListBlock).Fault(t.Exception);
                else toListBlock.Complete();
            });
            toListBlock.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted) ((IDataflowBlock)action).Fault(t.Exception);
                else action.Complete();
            });

            loadDataFromFileBlock.Post(files);
            loadDataFromFileBlock.Complete();
            action.Completion.Wait();
        }
コード例 #3
0
        public TransformBlock <BuilderCustomerData, BuilderCustomerData> Filter(int minimumSymbols)
        {
            var block = new TransformBlock <BuilderCustomerData, BuilderCustomerData>(data =>
            {
                var filter   = new FilterTextData(minimumSymbols);
                bool enabled = filter.Run(data.CustomerData);
                return(new BuilderCustomerData
                {
                    PathToFile = data.PathToFile,
                    Enabled = enabled,
                    CustomerData = data.CustomerData
                });
            });

            return(block);
        }
コード例 #4
0
        public FlowBuilderFactory_v3 Filter(int minimumSymbols)
        {
            var block = new TransformBlock <object, object>(dataObject =>
            {
                var data     = (BuilderCustomerData)dataObject;
                var filter   = new FilterTextData(minimumSymbols);
                bool enabled = filter.Run(data.CustomerData);
                return(new BuilderCustomerData
                {
                    PathToFile = data.PathToFile,
                    Enabled = enabled,
                    CustomerData = data.CustomerData
                });
            });

            Flow.Add(block);
            return(this);
        }
コード例 #5
0
        static public void ProcessingByTPL_StraightForwardImplementation()
        {
            const string pathToFiles = @"..\..\..\..\DataFiles";

            string[] files = Directory.GetFiles(pathToFiles, "*.txt", SearchOption.AllDirectories);

            var loadDataFromFileBlock = new TransformBlock <string[], List <CustomerTextData> >(fileItems =>
            {
                var factory = new CustomerTextDataFactory();
                return(new List <CustomerTextData>(Array.ConvertAll(fileItems, factory.LoadFromFile)));
            });
            var filterBlock = new TransformBlock <List <CustomerTextData>, List <CustomerTextData> >(textDataList =>
            {
                var filter = new FilterTextData(5);
                return(textDataList.Where(filter.Run).ToList());
            });
            var toListBlock = new TransformManyBlock <List <CustomerTextData>, CustomerTextData>(textDataList =>
            {
                var queue = new ConcurrentQueue <CustomerTextData>();
                textDataList.ForEach(queue.Enqueue);
                return(queue);
            });
            var action = new ActionBlock <CustomerTextData>(textData =>
            {
                var weight = new WeightTextData();
                int result = weight.Run(textData);
                Trace.WriteLine(result);
                Console.WriteLine(result);
            });

            loadDataFromFileBlock.LinkTo(filterBlock);
            filterBlock.LinkTo(toListBlock);
            toListBlock.LinkTo(action);

            loadDataFromFileBlock.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    ((IDataflowBlock)filterBlock).Fault(t.Exception);
                }
                else
                {
                    filterBlock.Complete();
                }
            });
            filterBlock.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    ((IDataflowBlock)toListBlock).Fault(t.Exception);
                }
                else
                {
                    toListBlock.Complete();
                }
            });
            toListBlock.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    ((IDataflowBlock)action).Fault(t.Exception);
                }
                else
                {
                    action.Complete();
                }
            });

            loadDataFromFileBlock.Post(files);
            loadDataFromFileBlock.Complete();
            action.Completion.Wait();
        }