一个简单 System.Threading.Tasks.Dataflow.TransformBlock 示例
2024-10-20 02:20:04
直接贴代码了:
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks.Dataflow; namespace DataFlowSample
{
class Program
{
static void Main()
{
var target = SetupPipeline();
target.Post(@"D:\Source\BenchmarkAndSpanExample-master\BenchmarkAndSpanExample");
Console.ReadLine();
} public static IEnumerable<string> GetFileNames(string path)
{
foreach (var fileName in Directory.EnumerateFiles(path, "*.cs"))
{
yield return fileName;
}
} public static IEnumerable<string> LoadLines(IEnumerable<string> fileNames)
{
foreach (var fileName in fileNames)
{
using (FileStream stream = File.OpenRead(fileName))
{
var reader = new StreamReader(stream);
string line = null;
while ((line = reader.ReadLine()) != null)
{
//WriteLine($"LoadLines {line}");
yield return line;
}
}
}
} public static IEnumerable<string> GetWords(IEnumerable<string> lines)
{
foreach (var line in lines)
{
string[] words = line.Split(' ', ';', '(', ')', '{', '}', '.', ',');
foreach (var word in words)
{
if (!string.IsNullOrEmpty(word))
yield return word;
}
}
} public static ITargetBlock<string> SetupPipeline()
{
var fileNamesForPath = new TransformBlock<string, IEnumerable<string>>(
path => GetFileNames(path)); var lines = new TransformBlock<IEnumerable<string>, IEnumerable<string>>(
fileNames => LoadLines(fileNames)); var words = new TransformBlock<IEnumerable<string>, IEnumerable<string>>(
lines2 => GetWords(lines2)); var display = new ActionBlock<IEnumerable<string>>(
coll =>
{
foreach (var s in coll)
{
Console.WriteLine(s);
}
}); fileNamesForPath.LinkTo(lines);
lines.LinkTo(words);
words.LinkTo(display);
return fileNamesForPath;
}
}
}
谢谢浏览!
最新文章
- null、undefined、false、0相等性比较
- SQL初级
- golang 简易聊天
- CVE-2014-6271 Bash漏洞利用工具
- 【Visual Lisp】Visual Lisp属性与方法
- mysql5.5 uuid做主键与int做主键的性能实测
- 8.cadence.CIS[原创]
- C# 获取汉字的拼音首字母
- ***iOS 项目的目录结构能看出你的开发经验
- java后台获取国际化资源文件
- HTML5 调用手机相册和摄像头的方法并上传微信下测试通过
- 为什么需要DevOps
- git的入门使用操作
- Ajax跨域之ContentType为application/json请求失败的问题
- Nginx 针对上游服务器缓存
- Ubuntu16.04下修改MySQL数据的默认存储位置
- ArcGIS for JS 离线部署
- Javascript 中ajax实现前台向后台交互
- 12312312312312ssss
- 网站漏洞修复案例之Discuz!3.4最新版本