在微软的.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全部执行完成。

最新文章

  1. 【转】ubuntu下最好用的输入法fcitx-sunpinyin
  2. RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
  3. EF-CodeFirst-2玩的嗨
  4. (转)投影矩阵的推导(Deriving Projection Matrices)
  5. codeforces A. Vasya and Digital Root 解题报告
  6. pyvcf 模块
  7. iwpriv
  8. 1128. Partition into Groups(图着色bfs)
  9. C语言嵌入式系统编程修炼之一:背景篇
  10. SAE 安装未包含的第三方依赖包
  11. zabbix监控服务器部署
  12. KoaHub平台基于Node.js开发的Koa的调试实用程序
  13. 【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core
  14. Java 文件流操作.
  15. 在flask中使用swagger(flasgger使用方法及效果展示)
  16. webpack+react多页面开发(二)-终极架构
  17. 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告
  18. Windows + Ubuntu双系统时间不一致
  19. 在Azure DevOps Server (TFS) 中修改团队项目名称
  20. UBUNTU 安装中文语言包命令

热门文章

  1. iOS:SQL
  2. Flask之蓝图的使用
  3. IAP笔记
  4. C# 获取UTC 转换时间戳为C#时间
  5. Python3爬虫(十五) 代理
  6. Java技术——Iterator和Enumeration的不同
  7. 北京Uber优步司机奖励政策(12月16日)
  8. 成都Uber优步司机奖励政策(2月28日)
  9. Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
  10. 能用程序解决的问题绝不BB之租房篇章...