.Net并行编程 - 并行任务基础知识
2024-08-24 07:56:55
在微软的.NET Framework中,任务是通过System.Threading.Tasks命令空间中的Task类来实现的。它的静态属性Task.Factory是TaskFactory类的一个实例,它被用来创建和调度新任务。
调度是并行任务的一个重要方面。新任务并不一定会像线程那样直接开始运行,而是被放在一个工作队列里面。
有两个方法,DoLeft()
public static void DoLeft()
{
Thread.Sleep();
Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoLeft is running!"));
}
和DoRight()
public static void DoRight()
{
Thread.Sleep();
Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoRight is running!"));
}
我们来并行的执行这两个任务。
• Parallel.Invoke方式
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); Parallel.Invoke(DoLeft, DoRight); sw.Stop();
Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds)); Console.Read();
}
运行结果为:
运行结果表明Parallel.Invoke方法创建了新任务并等待它们完成。
• Task.Factory.StartNew方法
调用方法变更为:
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); var task1 = Task.Factory.StartNew(DoLeft); //StartNew, 创建并启动System.Threading.Tasks.Task
var task2 = Task.Factory.StartNew(DoRight); sw.Stop();
Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds)); Console.Read();
}
运行结果:
从结果可以得出,TaskFactory类的StartNew方法会创建并调度一个新任务,并不等待任务执行完成。添加Task.WaitAll来等待所有并行任务执行完成。
Task.WaitAll(task1, task2);
可以看出其是在等待tasks全部执行完成。
最新文章
- 【转】ubuntu下最好用的输入法fcitx-sunpinyin
- RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
- EF-CodeFirst-2玩的嗨
- (转)投影矩阵的推导(Deriving Projection Matrices)
- codeforces A. Vasya and Digital Root 解题报告
- pyvcf 模块
- iwpriv
- 1128. Partition into Groups(图着色bfs)
- C语言嵌入式系统编程修炼之一:背景篇
- SAE 安装未包含的第三方依赖包
- zabbix监控服务器部署
- KoaHub平台基于Node.js开发的Koa的调试实用程序
- 【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core
- Java 文件流操作.
- 在flask中使用swagger(flasgger使用方法及效果展示)
- webpack+react多页面开发(二)-终极架构
- 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告
- Windows + Ubuntu双系统时间不一致
- 在Azure DevOps Server (TFS) 中修改团队项目名称
- UBUNTU 安装中文语言包命令