专做奢侈品品牌的网站网站关键词的确定

web/2025/9/26 14:23:57/文章来源:
专做奢侈品品牌的网站,网站关键词的确定,电商网站平台,网站如何提交关键词在.NET 4.0中#xff0c;并行计算与多线程得到了一定程度的加强#xff0c;这主要体现在并行对象Parallel#xff0c;多线程Task#xff0c;与PLinq。这里对这些相关的特性一起总结一下。 使用Thread方式的线程无疑是比较麻烦的#xff0c;于是在这个版本中有了改善的版本…  在.NET 4.0中并行计算与多线程得到了一定程度的加强这主要体现在并行对象Parallel多线程Task与PLinq。这里对这些相关的特性一起总结一下。 使用Thread方式的线程无疑是比较麻烦的于是在这个版本中有了改善的版本Task。除了运行效率等方面的提升Task还与并行计算紧紧联系在了一起这些线程充分的利用了多核的优势在一定的场合下大幅的提高了程序的运行效率。屏蔽了运行细节的Task和Parallel方式使得程序员们完全不用编写任何针对多核的程序只需要使用标准的类库完成任务就可以了其它的CLR会去处理。 这一篇中先看第一个利器多线程Task。 Task类为把线程类进行改良使之使用起来更简便更加容易。要想开启一个新的线程执行任务只要调用Task.Factory.StartNew方法就可以了执行完这个语句后线程就开始运行了。当然了使用new初始化一个Task然后适时调用其Start方法开始运行也是很不错的一个选择。 using System; using System.Threading.Tasks;class Program {static void Main(string[] args){ var task Task.Factory.StartNew(() {for (int i 0; i 100; i) { Console.Write(B); }});task.ContinueWith(t {Console.WriteLine();Console.WriteLine(sub task {0} done, t.Id);});for (int i 0; i 100; i) { Console.Write(A); }task.Wait();} } 注意最后的task.Wait()调用这个方法是等待子线程执行结束当需要等待子线程结果的时候它最有用。 task对象还有很多有用的方法从它们的名字就可以知道它们各自的用途了其中实例方法如上面的ContinueWith方法它会在task执行完毕后执行其参数指定的行为静态方法如WaitAnyWaitAll等它们指定了在执行多个task时主线程的等待条件。 对于多线程编程来说启动线程并等待其自然结束是最常见的一种应用处理也比较简单。相比而言线程的中途终止和异常的处理要麻烦的多难以预计的隐藏bug会出现在线程程序中。 线程的终止类型 线程执行的任务结束以后线程就正常结束了。这里线程任务结束通常有3种情况任务正常执行完任务被取消任务被异常打断结束。查询Task结束时的状态类型就是调用相关的属性如下面的例子 static void Main(string[] args) {Task t new Task(() {Console.WriteLine(任务开始工作……);//模拟工作过程Thread.Sleep(5000);});t.Start();t.ContinueWith((task) {Console.WriteLine(任务完成完成时候的状态为);Console.WriteLine(IsCanceled{0}\tIsCompleted{1}\tIsFaulted{2}, task.IsCanceled, task.IsCompleted, task.IsFaulted);});Console.ReadKey(); } Task对象的三个属性IsCompletedIsCanceledIsFaulted就是查询线程的执行情况不过需要注意只要线程结束了不管是以什么方式IsCompleted始终返回true。IsCanceled代表程序被主动取消了IsFaulted代表线程出现异常被动结束这两个值都为false代表线程是正常执行完结束的。 正常结束的情况比较简单这里就不多说了这里看一下子线程任务的取消问题。这在编程中是很常见的一个需求启动了一个线程以后发现某些条件具备了就不需要线程继续运行了这个时候就需要取消线程任务。 主动取消/中止线程的标准做法 在以前的版本中我基本上是都通Thread的Abort方法强行的中止线程。在C# 4.0中标准的取消一个线程任务的做法是使用协作式取消(Cooperative Cancellation)。协作式取消的机制是如果线程需要被停止那么线程自身就得负责开放给调用者这样的接口Cancled然后线程在工作的同时不断以某种频率检测Cancled标识(通常是把任务主体包装到循环中)若检测到Cancled线程自己负责退出。 下面是一个最基础的协作式取消的样例 // 设定取消标识 CancellationTokenSource cts new CancellationTokenSource(); Thread t new Thread(() {while (true){// 检查取消标识if (cts.Token.IsCancellationRequested){Console.WriteLine(线程被终止);break;}Console.WriteLine(DateTime.Now.ToString());Thread.Sleep(1000);}});t.Start(); Console.ReadLine(); // 主线程申请取消 cts.Cancel(); 调用者使用CancellationTokenSource的Cancle方法通知工作线程退出。工作线程则以一定的的频率一边工作一边检查是否有外界传入进来的Cancel信号。若有这样的信号则负责退出。可以看到在正确停止线程的机制中真正起到主要作用的是线程本身它负责检测相关信号并退出。 协作式取消中的关键类型是CancellationTokenSource。它有一个关键属性TokenToken是一个名为CancellationToken的值类型。CancellationToken继而进一步提供了布尔值的属性IsCancellationRequested作为需要取消工作的标识。CancellationToken还有一个方法尤其值得注意那就是Register方法。它负责传递一个Action委托在线程停止的时候被回调使用方法如 cts.Token.Register(() {Console.WriteLine(工作线程被终止了。); }); 而且Task对象对CancellationTokenSource对象是天生支持的在构造Task对象的时候就可以传进去CancellationTokenSource的实例。看一个网上的小例子 static void Main(string[] args) {CancellationTokenSource cts new CancellationTokenSource();Taskint t new Taskint(() Add(cts.Token), cts.Token);t.Start();t.ContinueWith(TaskEnded);//等待按下任意一个键取消任务Console.ReadKey();cts.Cancel();Console.ReadKey(); }static void TaskEnded(Taskint task) {Console.WriteLine(任务完成完成时候的状态为);Console.WriteLine(IsCanceled{0}\tIsCompleted{1}\tIsFaulted{2}, task.IsCanceled, task.IsCompleted, task.IsFaulted);Console.WriteLine(任务的返回值为{0}, task.Result); }static int Add(CancellationToken ct) {Console.WriteLine(任务开始……);int result 0;while (!ct.IsCancellationRequested){result;Thread.Sleep(1000);}return result; } 不过需要注意像上面这么写使用ct.IsCancellationRequested判断一下如果取消信号被设定了则退出任务这种情况CLR会认为是成功结束的这切实反应了程序员的期望IsCanceled会返回false。如果想出现IsCanceled为true的情况那么程序就要改写成 static void Main(string[] args) {CancellationTokenSource cts new CancellationTokenSource();Taskint t new Taskint(() AddCancleByThrow(cts.Token), cts.Token);t.Start();t.ContinueWith(TaskEndedByCatch);//等待按下任意一个键取消任务Console.ReadKey();cts.Cancel();Console.ReadKey(); }static void TaskEndedByCatch(Taskint task) {Console.WriteLine(任务完成完成时候的状态为);Console.WriteLine(IsCanceled{0}\tIsCompleted{1}\tIsFaulted{2}, task.IsCanceled, task.IsCompleted, task.IsFaulted);try{Console.WriteLine(任务的返回值为{0}, task.Result);}catch (AggregateException e){e.Handle((err) err is OperationCanceledException);} }static int AddCancleByThrow(CancellationToken ct) {Console.WriteLine(任务开始……);int result 0;while (true){ct.ThrowIfCancellationRequested();result;Thread.Sleep(1000);}return result; } 在任务结束求值的方法TaskEndedByCatch中如果任务是通过ThrowIfCancellationRequested方法结束的对任务求结果值将会抛出异常OperationCanceledException而不是得到抛出异常前的结果值。这意味着任务是通过异常的方式被取消掉的所以可以注意到上面代码的输出中状态IsCancled为true。同时你会发现IsFaulted状态却还是等于false。这是因为ThrowIfCancellationRequested是协作式取消方式类型CancellationTokenSource的一个方法CLR进行了特殊的处理。CLR知道这一行程序开发者有意为之的代码所以不把它看作是一个异常它被理解为取消。要得到IsFaulted等于true的状态自己手动在一个地方抛出一个异常试试就可以了。 此外CancellationTokenSource就是可以被多个Task共享的这样可以取消一组任务。取消一组任务最简单的就是使用任务工厂。任务工厂支持多个任务之间共享相同的状态如取消类型。通过使用任务工厂可以同时取消一组任务 static void Main(string[] args) {CancellationTokenSource cts new CancellationTokenSource();//等待按下任意一个键取消任务TaskFactory taskFactory new TaskFactory();Task[] tasks new Task[]{taskFactory.StartNew(() Add(cts.Token)),taskFactory.StartNew(() Add(cts.Token)),taskFactory.StartNew(() Add(cts.Token))};//CancellationToken.None指示TasksEnded不能被取消taskFactory.ContinueWhenAll(tasks, TasksEnded, CancellationToken.None);Console.ReadKey();cts.Cancel();Console.ReadKey(); }static void TasksEnded(Task[] tasks) {Console.WriteLine(所有任务已完成); } 好了看完线程的正常取消再来看一下线程的异常问题这个在上面也简单说了一下这是一种程序员不期望的线程结束的方式。 线程的异常处理 先看下面的例子 Task.Factory.StartNew(() {throw new Exception(); }); 运行这段程序你会发现根本没有异常抛出线程中的异常会被线程忽略掉这个是我们不需要的我们需要知道异常发生了并进行相应的处理。 跟踪这种问题通常记日志是一种常用方法。此外通过技术手段去捕获这些异常时另一种方式这是这里讨论的重点。 Task线程中未捕获的异常会在垃圾回收时终结器执行线程中被抛出。我们可以通过GC.Collect来强制垃圾回收从而引发终结器处理线程此时Task的未捕获异常会被抛出。例如 //在Task中抛出异常 Task.Factory.StartNew(() {throw new Exception(); }); //确保任务完成 Thread.Sleep(100); //强制垃圾回收 GC.Collect(); //等待终结器处理 GC.WaitForPendingFinalizers(); 好了异常抛出程序崩溃了。不过这个行为在.NET 4.5中又有所改变直接运行这个程序并不会抛出异常而在App.config中添加如下配置以后异常才会抛出 configurationruntimeThrowUnobservedTaskExceptions enabledtrue//runtime /configuration 抛出异常程序崩溃并不是程序员想要的行为我们期望的是可以捕获异常并处理之。要达到这个目的针对Task对象我们可以采用的手段有这么几个调用Task.Wait/WaitAll或者引用TaskT.Result属性(这个在上面的例子中已经使用了)或者最简单的引用Task.Exception属性来捕获Task的异常。 例如通过Task.Wait手动捕获AggregateException try {Task.WaitAll(Task.Factory.StartNew(() {throw new Exception();})); } catch (AggregateException) {// 处理异常//...... } 这样我们就捕获到了异常并可以处理它了。 当然最简单的就是直接引用一下Task.Exception属性 Task.Factory.StartNew(() {throw new Exception(); }).ContinueWith(t { var exp t.Exception;// 处理异常//...... }); 同样的我们捕获了异常并且处理掉异常就可以了像上面例子中的处理方式就是忽略线程异常没做任何处理。 另外可以通过TaskContinuationOptions.OnlyOnFaulted来使得只有在发生异常时才去执行ContinueWith中指定的行为代码如下 Task.Factory.StartNew(() {throw new Exception(); }).ContinueWith(t { var exp t.Exception; }, TaskContinuationOptions.OnlyOnFaulted); 最后需要说明的是TaskScheduler.UnobservedTaskException事件该事件是所有未捕获被抛出前的最后可以将其捕获的方法。通过UnobservedTaskExceptionEventArgs.SetObserved方法来将异常标记为已捕获。 TaskScheduler.UnobservedTaskException (s, e) {//设置所有未捕获异常被捕获e.SetObserved(); };Task.Factory.StartNew(() {throw new Exception(); }); 好了Task的有关问题就总结到这里了下面将总结一下并行计算方面的知识它们与Task对象之间其实存在着千丝万缕的联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

食用油 网站 模板挖掘关键词工具

目录 1. 二叉树的前序遍历 (中,后序类似)2. 二叉树的最大深度3. 平衡二叉树4. 二叉树遍历 1. 二叉树的前序遍历 (中,后序类似) 这道题的意思是对二叉树进行前序遍历,把每个结点的值都存入一个数组中,并且返回这个数组。 思路&…

厦门网站设计推广公司ai特效字体网站

电话光端机顾名思义其实也是一种光端机,但是他不仅仅只能传输电话的光端机。它的用户接口类型多样(包括语音、数据、图象),均以小型模块化部件方式装配到母板上,各种用户模块可以混合装配,方便扩容及维护。…

洛阳做网站公司电话p2p借贷网站建设

[js] js源代码压缩都有哪些方法?它们的压缩原理分别是什么 方法 1.在线工具 2.webpack原理 1.删除注释 2.变量名方法名字符精减个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与…

网站美工培训青岛最新通知

URL:统一资源定位符,说白了,就是一个网络 通过URLConnection类可以连接到URL,然后通过URLConnection可以获取读数据的通道。非文本数据用字节流来读取。 读完之后写入本地即可。 public class test {public static void main(S…

在哪里买空间做网站中小企业网络营销论文

推荐一部好电影《致命魔术》。(此处为植入广告) 推荐理由:涉及人性。画面不错,剧情跌宕,亦魔亦幻(此处的”魔“为魔术的”魔“)。虽然女猪脚不尽如人意,但是男猪脚比较帅。而…

电商运营学习网站手机网站建设怎样

文章目录1.线性探测 哈希表代码2.拉链法 哈希表代码1. 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。 2. 散列函数,设计的基…

上海定制网站开发营销推广小兵cms个人网站模板

首先是方法的参数是父类对象,传入子类对象是否可行 然后引出Parent p new Children(); 这句代码不是很理解,google的过程中引出向上转型 要理解向上转型又引出了动态绑定 从动态绑定又引出了静态绑定 程序绑定的概念: 绑定指的是一个方法的…

商城网站前台html模板如何在百度上发广告

在现代软件开发中,Git已经成为了版本控制系统的事实标准。无论是在个人项目还是大型企业级开发中,Git都是不可或缺的工具。因此,掌握Git的基本操作和高级特性对于软件开发者来说是非常重要的。以下是根据提供的文件内容,总结出的3…

网站模板和定制logo设计图片免费 图案 简约

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置。 在这篇文章中,我计划提出对配置属性的弃用,并讨论各种值提供程序&#x…

有个新网站专门做外贸的叫什么做网站学不需要做后台管理系统

UG装配约束命令在如下位置 首选接触:含接触和对齐,自动判断两种类型 接触:约束对象使其曲面法向在相反方向,并共面或共线 对齐:约束对象使其曲面法向在同一方向,并共面或共线 自动判断中心/轴&#xff1…

网站盈利的10种方式我的班级网站模板

目录 前言边云协同时代背景边缘人工智能边缘挑战英特尔边云协同的创新成果最后 前言 最近观看了英特尔On技术创新大会直播,学到了挺多知识,其中对英特尔高级首席 AI 工程张宇博士讲解的边云协同加速 AI 解决方案商业化落地特别感兴趣。张宇博士讲解了英…

永年县网站一个新手怎么做电商

近日,Scroll生态项目Penpad将品牌进一步升级为Pencils Protocol,全新升级后其不仅对LaunchPad平台进行了功能上的升级,同时其也进一步引入了Staking、Vault以及Shop等玩法,这也让Pencils Protocol的叙事方向不再仅限于LaunchPad&a…

烟台快速建站公司iis5.1怎么新建网站

AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。AIDE能够构造一个指定文档的数据库,他使用aide.conf作为其配置文档。AIDE数据库能够保存文档的各种属性,包括:权…

中英企业网站模板中国网站用Cn域名

这篇小文将使用小波多分辨分析对一个简单信号进行降噪,主要是降噪流程,为以后的小波更复杂的降噪算法打下良好的基础。降噪算法流程大致如下: (1)去趋势项(如直流电流),并将数据归一…

重庆专业做网站安徽鲲鹏建设集团有限公司网站

lucene学习教程 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 2 lucene的工作方式 lucene提供的服务实际包含两部分&#xf…

电商 wordpress主题河北网站seo策划

目录 一:绘制直线 二:绘制矩形 三:绘制圆形 四:绘制椭圆

网站空间选择公司介绍ppt制作

一、 总则 本部分规定了 IT 运维服务支撑系统的应用需求,包括 IT 运维服务模型与模式、 IT 运维服务管理体系、以及 IT 运维服务和管理能力评估与提升途径。 二、 参考标准 下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件&#xff0c…

中小企业网站建设开题报告网站购物车建设

笔记来源: 1.【传送门】 2.【传送门】 前沿原理介绍 Grander因果检验是一种分析时间序列数据因果关系的方法。 基本思想在于,在控制Y的滞后项 (过去值) 的情况下,如果X的滞后项仍然有助于解释Y的当期值的变动,则认为 X对 Y产生…

新增网站备案设计一个自己公司网站开发

在开发阶段,如果同时拥有多个开源代码托管平台的账户,在代码的管理上非常麻烦。那么,如果同一台机器上需要配置多个账户,怎样才能确保不冲突,不同账户独立下载独立提交呢? 我们以两个github账号进行演示 …

免费网站后台管理系统模板下载青岛网站建设信息公示

一、 1.1 QSqlRelationalTableModel继承自QSqlTableModel,并且对其进行了扩展,提供了对外键的支持。一个外键就是一个表中的一个字段 和 其他表中的主键字段之间的一对一的映射。例如,“studInfo”表中的departID字段对应的是“departments…