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

滨州市网站建设_网站建设公司_论坛网站_seo优化

静态网站安全性,wordpress怎么增加语言包,哪里长沙网站开发,建设规划展览馆网站的优势本随笔续接#xff1a;.NET 实现并行的几种方式#xff08;一#xff09; 四、Task 3#xff09;Task.NET 4.5 中的简易方式 在上篇随笔中#xff0c;两个Demo使用的是 .NET 4.0 中的方式#xff0c;代码写起来略显麻烦#xff0c;这不 .NET 4.5提供了更加简洁的方…本随笔续接.NET 实现并行的几种方式一  四、Task   3Task.NET 4.5 中的简易方式 在上篇随笔中两个Demo使用的是 .NET 4.0 中的方式代码写起来略显麻烦这不 .NET 4.5提供了更加简洁的方式让我们来看一下吧。 /// summary/// Task.NET 4.5 中的简易方式/// /summarypublic void Demo3(){Task.Run(() {SetTip(简洁的代码);});Task.Run(() {SetTip(验证 CreationOptions 属性);}).ContinueWith((t) {SetTip(CreationOptions: t.CreationOptions.ToString()); });} 五、TPL (Task Parallel Library) TPL 任务并行库是 .NET 4.0 中的另一个重量级模块可以极其优雅、便捷地完成并行逻辑的编码工作。 1Parallel.Invoke并行多个独立的Action /// summary/// Parallel.Invoke并行多个独立的Action/// /summarypublic void Demo1(){Task.Run(() {ListAction actions new ListAction();// 生成并行任务for (int i 0; i 5; i){// 注意、这里很关键不可直接使用i变量。 // 原因在稍后的随笔中进行说明int index i;actions.Add(new Action(() {SetTip(string.Format(Task{0} 开始, index));SetTip(string.Format(Task{0} 休眠1秒, index));Thread.Sleep(1000);SetTip(string.Format(Task{0} 休眠5秒, index));Thread.Sleep(5000);SetTip(string.Format(Task{0} 结束, index));}));}// 执行并行任务Parallel.Invoke(actions.ToArray());// 当上述的5个任务全部执行完毕后才会执行该代码SetTip(并行任务执行完毕);});} 2Parallel简单的For并行 如果 Parallel.Invoke 看做是任务并行 则 Parallel.For 则是数据并行可方便的完成For循环并行遍历。 /// summary/// Parallel简单的For并行/// /summarypublic void Demo2(){// 为了实时更新UI、将代码异步执行Task.Run(() {Parallel.For(1, 100, (index) {SetTip(string.Format(Index:{0}, 开始执行Task, index));Thread.Sleep(1000);SetTip(string.Format(Index:{0}, 开始休眠Action 1秒, index));SetTip(string.Format(Index:{0}, Task执行完毕, index));});SetTip(并行任务执行完毕);});} 3Parallel.For并行 并行中的 break、 return、 continue break : 在 Parallel.For 中使用 ParallelLoopState.Break() 方法代替。 return: 在 Parallel.For 中使用 ParallelLoopState.Break() 方法代替。 continue : 在 Parallel.For 中直接使用 return 即可。 /// summary/// 中断Parallel.For并行/// /summarypublic void Demo3(){// 为了实时更新UI、将代码异步执行Task.Run(() {int breakIndex new Random().Next(10, 50);SetTip( BreakIndex : ------------------------- breakIndex);Parallel.For(1, 100, (index, state) {SetTip(string.Format(Index:{0}, 开始执行Task, index));if (breakIndex index){SetTip(string.Format(Index:{0}, ------------------ Break Task, index));state.Break();// Break方法执行后、// 大于 当前索引的并且未被安排执行的迭代将被放弃// 小于 当前索引的的迭代将继续正常执行直至迭代执行完毕return;}Thread.Sleep(1000);SetTip(string.Format(Index:{0}, 休眠Action 1秒, index));SetTip(string.Format(Index:{0}, Task执行完毕, index));});SetTip(并行任务执行完毕);});}/// summary/// 终止Parallel.For并行/// /summarypublic void Demo4(){// 为了实时更新UI、将代码异步执行Task.Run(() {int stopIndex new Random().Next(10, 50);SetTip( StopIndex : ------------------------- stopIndex);Parallel.For(1, 100, (index, state) {SetTip(string.Format(Index:{0}, 开始执行Task, index));if (stopIndex index){SetTip(string.Format(Index:{0}, ------------------ Stop Task, index));state.Stop();// Stop方法执行后// 整个迭代将被放弃return;}Thread.Sleep(1000);SetTip(string.Format(Index:{0}, 休眠Action 1秒, index));SetTip(string.Format(Index:{0}, Task执行完毕, index));});SetTip(并行任务执行完毕);});} 4Parallel.For并行中的数据聚合 在并行中绝大多数委托都是在不同的线程中运行的如果需要在并行中进行的数据共享、则需要考虑线程同步问题然而线程同步会影响并行性能。 为了解决特定情况下的数据共享而又不会因为线程同步而影响性能Parallel.For 提供了解决方案 /// summary/// Parallel.For并行中的数据聚合/// /summarypublic void Demo5(){Task.Run(() {// 求 1 到 10 的阶乘的 和long total 0;Parallel.Forlong(1, 10,() {SetTip(LocalInit);return 0;},(index, state, local) {SetTip(Body);int result 1;for (int i 2; i index; i){result * i;}local result;return local;},(x) {SetTip(LocalFinally);Interlocked.Add(ref total, x);});SetTip(Total : total);SetTip(并行任务执行完毕);});} MSDN备注 对于参与循环执行的每个线程调用 LocalInit 委托一次并返回每个线程的初始本地状态。  这些初始状态传递到每个线程上的第一个 body 调用。 然后每个后续正文调用返回可能修改过的状态值传递到下一个正文调用。  最后每个线程上的最后正文调用返回传递给 LocalFinally 委托的状态值。  每个线程调用 localFinally 委托一次以对每个线程的本地状态执行最终操作。  此委托可以被多个线程同步调用因此您必须同步对任何共享变量的访问。 也就是说 1) 并行中开辟的线程数 决定了 LocalInit、LocalFinally 的调用次数 2) 多个 迭代委托、Body 可能被同一个线程调用。 3) 迭代委托、Body 中的 local值并不一定是 LocalInit 的初始值也有可能是被修改的返回值。 4) LocalFinally 可能是被同时调用的需要注意线程同步问题。 5Parallel.ForEach并行 Parallel.ForEach算是另一种数据并行方式 它与大家熟知的 IEnumerableTSource 接口结合十分紧密是 foreach的并行版本。 /// summary/// Parallel.ForEach并行/// /summarypublic void Demo6(){Task.Run(() {Parallel.ForEachint(Enumerable.Range(1, 10), (num) {SetTip(Task 开始);SetTip(Task 休眠 num 秒);Thread.Sleep(TimeSpan.FromSeconds(num));SetTip(Task 结束);});SetTip(并行任务执行完毕);});} 6Parallel.ForEach中的索引中断、终止操作 在 Parallel.ForEach 中也可以轻易的获得其遍历的索引 /// summary/// Parallel.ForEach中的索引中断、终止操作/// /summarypublic void Demo7(){Task.Run(() {Parallel.ForEachint(Enumerable.Range(0, 10), (num, state, index) {// num, 并行数据源中的数据项// state, SetTip( Index : index Num: num);});SetTip(并行任务执行完毕);});} 本随笔到此、暂告一段落。 附Demo : http://files.cnblogs.com/files/08shiyan/ParallelDemo.zip
http://www.ihoyoo.com/news/45479.html

相关文章:

  • 网站建设勹金手指科捷14工程监理行业为什么做网站
  • 网站建设优化河南做网站的开发软件是什么
  • 株洲做网站建设seo诊断方案
  • 广东企业网站建设推荐龙岩市官网
  • 网站运营改进的点广州抖音seo
  • 百度 网站建设陕西建设厅证件查询网站
  • 公司做两个网站有影响吗企业微信营销管理软件
  • 网站开发的机遇wordpress新闻爬
  • 网站自然优化是什么意思做外贸有哪些好的网站
  • 怎么做符合seo的网站万网 网站建设合同
  • 买到一个域名以后如何做网站谷歌英文网站推广
  • 医院网站必须建设吗seo裤子的关键词首页排名有哪些
  • 网站建设横向发展纵向发展甘肃省建设厅门户网站
  • 买微单的网站建设九江网络营销
  • 做app需要网站吗wordpress 创建子菜单
  • 网站自动化开发Wordpress排名插件
  • 网站模板代理电话广州建设银行官方网站
  • 临沂网站制作策划佛山手机网站建设公司
  • 上百度推广 免费做网站抚州建设网站
  • 网站的用户运营值得做吗公司建网站公司
  • 一流的高密做网站的品牌建设与诚信建设相结合
  • 学院路网站建设1000学习做网站贵吗
  • 云主机建网站软件广州网站建设 讯度网络
  • 手机网站专题页app网站开发定制
  • 黄冈网站建设费用龙华网站制作公司
  • 幸福宝推广app网站下载潜江建设局网站
  • 网站建设需求流程图设计方案英语
  • 肇庆做网站设计公司怎样设置网站关键词
  • 潍坊网站建设淘宝客网站模块
  • 网站地图怎么弄公司没有备案了网站