当前位置: 首页 > news >正文

企业官方网站建设如何旅游网站建设翻译

企业官方网站建设如何,旅游网站建设翻译,wordpress 安装第二步,企业网站建设哪里做网站好引言 在C#的并发编程中#xff0c;Channel是一种非常强大的数据结构#xff0c;用于在生产者和消费者之间进行通信。本文将首先通过一个实际的使用案例#xff0c;介绍如何在C#中使用Channel#xff0c;然后深入到Channel的源码中#xff0c;解析其内部的实现机制。 使用案… 引言 在C#的并发编程中Channel是一种非常强大的数据结构用于在生产者和消费者之间进行通信。本文将首先通过一个实际的使用案例介绍如何在C#中使用Channel然后深入到Channel的源码中解析其内部的实现机制。 使用案例一文件遍历和过滤 在我们的使用案例中我们需要遍历一个文件夹及其所有子文件夹并过滤出具有特定扩展名的文件。在此我们使用了C#的Channel来实现这个任务。 首先我们创建了一个名为EnumerateFilesRecursively的方法这个方法接受一个文件夹路径作为参数并返回一个ChannelReader。这个方法中我们创建了一个有界的Channel然后在一个单独的任务中遍历指定的文件夹及其所有子文件夹并将找到的每个文件的路径写入Channel。当遍历完成后我们关闭Channel的写入端。 ChannelReaderstring EnumerateFilesRecursively(string root, int capacity 100, CancellationToken token default) {var output Channel.CreateBoundedstring(capacity);async Task WalkDir(string path){IEnumerablestring files null, directories null;try{files Directory.EnumerateFiles(path);directories Directory.EnumerateDirectories(path);}catch (Exception ex){Console.WriteLine($An error occurred: {ex.Message});}if (files ! null){foreach (var file in files){await output.Writer.WriteAsync(file, token);}}if (directories ! null)await Task.WhenAll(directories.Select(WalkDir));}Task.Run(async () {await WalkDir(root);output.Writer.Complete();}, token);return output.Reader; } 然后我们创建了一个名为FilterByExtension的方法这个方法接受一个ChannelReader和一个扩展名集合作为参数并返回一个ChannelReader。在这个方法中我们创建了一个无界的Channel然后在一个单独的任务中从输入的Channel中读取每个文件路径检查其扩展名如果满足条件就将其转换为FileInfo并写入输出的Channel。当所有的文件都被处理后我们关闭Channel的写入端。 ChannelReaderFileInfo FilterByExtension(ChannelReaderstring input, IReadOnlySetstring exts, CancellationToken token default) {var output Channel.CreateUnboundedFileInfo();Task.Run(async () {try{await foreach (var file in input.ReadAllAsync(token).ConfigureAwait(false)){var fileInfo new FileInfo(file);if (exts.Contains(fileInfo.Extension))await output.Writer.WriteAsync(fileInfo, token).ConfigureAwait(false);}}catch (Exception ex){Console.WriteLine($An error occurred: {ex.Message});}finally{output.Writer.Complete();}}, token);return output; } 最后在Main方法中我们首先调用EnumerateFilesRecursively方法遍历指定的文件夹并得到一个文件路径的Channel。然后调用FilterByExtension方法过滤出具有特定扩展名的文件并得到一个文件信息的Channel。最后遍历这个Channel打印出每个文件的全路径。 var fileSource EnumerateFilesRecursively(D:\\Program Files\\.nuget\\packages); var sourceCodeFiles FilterByExtension(fileSource, new HashSetstring { .json, .map, .dll });await foreach (var file in sourceCodeFiles.ReadAllAsync().ConfigureAwait(false)) {Console.WriteLine(${file.FullName}); }Console.ReadKey(); 在这个例子中可以看到无论是文件的遍历还是过滤都是并行进行的并且这两个任务之间通过Channel进行了解耦使得代码更加简洁和清晰。此外由于Channel的异步特性我们的程序在等待数据的时候不会阻塞从而大大提高了程序的性能和响应性。 使用案例二Excel读取与翻译内容 在我们的使用案例中我们需要读取Excel文件同时将读取的内容处理调用对应的翻译服务进行翻译并将翻译结果打印到控制台并存储到新的Excel文件中。为此我们定义了一个名为ExcelTranslationProvider的类。 ExcelTranslationProvider类 ExcelTranslationProvider类是一个专门处理Excel文件翻译的工具。它主要使用了.NET的Channel来处理异步数据流从而提高了翻译的效率。以下是该类的代码 public class ExcelTranslationProvider : TranslationProvider {public static Translater Translater { get; set; } Translater.Azure;public static II18NTermTranslateService TranslateService TranslateServiceProvider.GetTranslateService(Translater);private static ExcelTranslationParameters translationParameters;public static async Task Translate(TranslationParameters parameters){if (parameters is not ExcelTranslationParameters excelParameters)throw new ArgumentException(Invalid parameters for Excel translation.);translationParameters excelParameters;var translateText TranslateText(excelParameters.Path);var i 1;ListTranslationDto list new ListTranslationDto();await foreach (var text in translateText.ReadAllAsync().ConfigureAwait(false)){System.Console.WriteLine(${i}、 text.TranslatText);list.Add(text);}await ExcelUtil.SaveAsAsync(excelParameters.SavePath, list);}private static ChannelReaderTranslationDto TranslateText(string path){var output Channel.CreateUnboundedTranslationDto();_ TranslateAndWriteToChannelAsync(path, output.Writer);return output.Reader;}private static async Task TranslateAndWriteToChannelAsync(string path, ChannelWriterTranslationDto writer){var query await ExcelUtil.QueryAsyncTranslationDto(path, translationParameters.Sheet);var tasks query.Select(async item {try{var res await TranslateService.TranslateSync(item.Name, en-US);item.TranslatText res;await writer.WriteAsync(item);}catch (Exception ex){System.Console.WriteLine($An error occurred: {ex.Message});}});await Task.WhenAll(tasks);writer.Complete();} } Translater和TranslateService这两个静态属性用于配置和获取翻译服务。Translater是一个枚举类型表示可用的翻译服务提供者。默认的翻译服务是Azure。TranslateService是一个只读属性返回一个实现了II18NTermTranslateService接口的翻译服务对象。这个对象是通过TranslateServiceProvider.GetTranslateService(Translater)方法获取的。translationParameters用于保存翻译参数这些参数包括源文件的路径、目标文件的路径等。Translate这个方法首先检查传入的参数是否为ExcelTranslationParameters类型。然后它调用TranslateText方法开始翻译过程。翻译的结果被保存在一个List列表中然后写入到Excel文件。TranslateText它创建了一个无界Channel并启动了一个异步任务来进行翻译操作并将结果写入到Channel中。无界Channel是一种可以存储任意数量元素的Channel它是通过Channel.CreateUnbounded()方法创建的。创建Channel后这个方法返回Channel的读取端同时启动了一个异步任务TranslateAndWriteToChannelAsync来进行翻译并将结果写入到Channel的中。TranslateAndWriteToChannelAsync它负责从Excel文件中读取数据进行翻译并将翻译结果写入到Channel中。这个方法首先从Excel文件中读取数据然后为每一条数据创建一个异步翻译任务。所有的翻译任务是并发执行的使用了Task.WhenAll(tasks)来等待所有的翻译任务完成。完成所有的翻译任务后这个方法调用writer.Complete()方法来表示没有更多的数据要写入到Channel中。
http://www.pierceye.com/news/471753/

相关文章:

  • 网站平台建设哪家公司好网站建设建站在线建站
  • 龙岗区住房和建设局在线网站网站如何做团购
  • 河南省建设监理协会网站证书查询wordpress 修改链接
  • 做网站业务员怎么样深圳福田最新新闻事件
  • 衡水商城网站建设外贸汽车配件做那个网站
  • 做网站的色彩搭配的小知识群艺馆网站建设方案
  • 深圳 汽车网站建设学习网站建设培训
  • 制作手机网站用什么软件唐山网站专业制作
  • 网站后台如何登陆互联网营销中心
  • 做排行榜的网站知乎长沙服务好的网络营销
  • 做网站猫要做端口映射吗太原网站建设口碑推荐
  • 新闻门户网站是什么快速搭建网页
  • 随意设计一个网站域名是什么?
  • 找人做网站需要准备什么材料用视频做网站背景
  • 大连做网站首选领超科技wordpress注册邮件发送设置
  • 西山区城市建设局网站如何做防水网站
  • 商务网站建设的组成包括自动链接 wordpress
  • 网站如何关闭东莞网站开发推荐
  • 自己开网站能赚钱吗网站界面设计描述
  • 二手交易网站建设方案ppt网站备案的作用
  • 北京行业网站建设临沂谁会做网站
  • 网站备案 游戏修改wordpress字体
  • 福建微网站建设价格宝山专业网站建设
  • 做采集网站难不关键词做网站名字
  • 怎么做律师事务所的网站用凡科做网站好吗
  • 免费做网站公司ydwzjs政务网站的建设
  • 企业网站设计总结西安做网站哪里便宜
  • wordpress 电影下载站济南最新消息
  • 怎样做企业的网站公司部门解散
  • 三亚中国检科院生物安全中心门户网站建设什么是响应式网站