Task任务的屏障机制
2024-10-09 21:30:05
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("全部加载完毕"); }
执行结果
最新文章
- ECMA中的switch语句
- vs2013中项目依赖项的作用
- OSG第一个Demo
- [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
- 重置mysql管理员密码
- SGU 解题报告
- 实战weblogic集群之安装weblogic
- 用CQRS+ES实现DDD
- leetcode第35题--Valid Sudoku
- ES CPU和磁盘IO升高
- 关于C++中的前置声明(附程序运行图)
- JAVA 遍历数组
- poj 3641 快速幂
- &ldquo;正在注册字体&rdquo;问题解决
- 原生JS的地区二级联动,很好理解的逻辑
- 超细讲解Django打造大型企业官网
- nginx访问日志,错误日志参数说明
- JS jQuery json日期格式问题的办法
- 几个好用的php函数
- flask基础之安装和使用入门(一)