zoukankan      html  css  js  c++  java
  • .Net并行编程

    在微软的.NET Framework中,任务是通过System.Threading.Tasks命令空间中的Task类来实现的。它的静态属性Task.Factory是TaskFactory类的一个实例,它被用来创建和调度新任务。

    调度是并行任务的一个重要方面。新任务并不一定会像线程那样直接开始运行,而是被放在一个工作队列里面。

    示例代码 

    有两个方法,DoLeft()

    1 public static void DoLeft()
    2 {
    3     Thread.Sleep(10000);
    4     Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoLeft is running!"));
    5 }

    和DoRight()

    1 public static void DoRight()
    2 {
    3     Thread.Sleep(2000);
    4     Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoRight is running!"));
    5 }

    我们来并行的执行这两个任务。

    • Parallel.Invoke方式

     1 static void Main(string[] args)
     2 {
     3     Stopwatch sw = new Stopwatch();
     4     sw.Start();
     5 
     6     Parallel.Invoke(DoLeft, DoRight);
     7 
     8     sw.Stop();
     9     Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds));
    10 
    11     Console.Read();
    12 }

    运行结果为:

    运行结果表明Parallel.Invoke方法创建了新任务并等待它们完成。

    • Task.Factory.StartNew方法

    调用方法变更为:

     1 static void Main(string[] args)
     2 {
     3     Stopwatch sw = new Stopwatch();
     4     sw.Start();
     5 
     6     var task1 = Task.Factory.StartNew(DoLeft);      //StartNew, 创建并启动System.Threading.Tasks.Task
     7     var task2 = Task.Factory.StartNew(DoRight);
     8 
     9     sw.Stop();
    10     Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds));
    11 
    12     Console.Read();
    13 }

    运行结果:

    从结果可以得出,TaskFactory类的StartNew方法会创建并调度一个新任务,并不等待任务执行完成。添加Task.WaitAll来等待所有并行任务执行完成。

    1 Task.WaitAll(task1, task2);

    可以看出其是在等待tasks全部执行完成。

  • 相关阅读:
    约瑟夫问题
    [bzoj] 2049 洞穴勘探 || LCT
    [bzoj] 1597 土地购买 || 斜率优化dp
    [usaco] 2008 Dec Largetst Fence 最大的围栏 2 || dp
    [LNOI] 相逢是问候 || 扩展欧拉函数+线段树
    [bzoj] 1588 营业额统计 || Splay板子题
    [hdu] 5115 Dire Wolf || 区间dp
    [poj] 1651 Multiplication Puzzle || 区间dp
    [bzoj] 1090 字符串折叠 || 区间dp
    [bzoj] 1068 压缩 || 区间dp
  • 原文地址:https://www.cnblogs.com/isun/p/4328749.html
Copyright © 2011-2022 走看看