Barrier 是 .Net 提供的一直并发的机制,它允许多个任务同步他们不同阶段的并发工作。

这里的关键点是【多个任务】和【不同阶段】。 
假设有4个相同的任务(Task),每个任务都有4个阶段(Phase),当他们并发工作时,只有当所有任务的相同步骤都完成时,所有任务才可以开始下一个步骤。

这里的 Barrier 就是 .NetFramework 提供的一种机制。它像一个篱笆(屏障),把所有任务的阶段隔离开来,当前阶段不完成,不会开始下一个阶段。

        static Task[] tasks = new Task[];
static Barrier barrier = null;
public void Test()
{
barrier = new Barrier(tasks.Length, (i) =>
{
Console.WriteLine("**********************************************************");
Console.WriteLine("\n屏障中当前阶段编号:{0}\n", i.CurrentPhaseNumber);
Console.WriteLine("**********************************************************");
}); for (int i = ; i < tasks.Length; i++)
{
tasks[i] = Task.Factory.StartNew((obj) =>
{
var single = Convert.ToInt32(obj);
Console.WriteLine("当前任务:{0}正在加载User部分数据!", single);
barrier.SignalAndWait();
Console.WriteLine("当前任务:{0}正在加载Product部分数据!", single);
barrier.SignalAndWait();
Console.WriteLine("当前任务:{0}正在加载Order部分数据!", single);
barrier.SignalAndWait();
}, i);
}
Task.WaitAll(tasks);
Console.WriteLine("全部加载完毕"); }

执行结果

最新文章

  1. ECMA中的switch语句
  2. vs2013中项目依赖项的作用
  3. OSG第一个Demo
  4. [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
  5. 重置mysql管理员密码
  6. SGU 解题报告
  7. 实战weblogic集群之安装weblogic
  8. 用CQRS+ES实现DDD
  9. leetcode第35题--Valid Sudoku
  10. ES CPU和磁盘IO升高
  11. 关于C++中的前置声明(附程序运行图)
  12. JAVA 遍历数组
  13. poj 3641 快速幂
  14. &ldquo;正在注册字体&rdquo;问题解决
  15. 原生JS的地区二级联动,很好理解的逻辑
  16. 超细讲解Django打造大型企业官网
  17. nginx访问日志,错误日志参数说明
  18. JS jQuery json日期格式问题的办法
  19. 几个好用的php函数
  20. flask基础之安装和使用入门(一)

热门文章

  1. 20165231 2017-2018-2《Java程序设计》课程总结
  2. MII、RMII、GMII接口的详细介绍【转】
  3. GCC 编译优化指南【转】
  4. win10 python27pyhton36共存
  5. 关于DateTime自带的AddSeconds等函数的坑
  6. Log4PHP日志库使用
  7. FTP服务器基础设定
  8. struts2框架学习之第一天
  9. POJ 3723
  10. DML_DDL_触发器