在微软的.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 }

运行结果为:

.Net并行编程 - 并行任务基础知识

运行结果表明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 }

运行结果:

.Net并行编程 - 并行任务基础知识

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

1 Task.WaitAll(task1, task2);

.Net并行编程 - 并行任务基础知识

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

相关文章:

  • 2019-03-29
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
  • 2021-11-08
  • 2021-06-01
  • 2021-05-30
  • 2022-12-23
猜你喜欢
  • 2021-09-07
  • 2021-12-29
  • 2022-12-23
  • 2021-03-14
  • 2021-08-12
  • 2021-10-24
  • 2022-12-23
相关资源
相似解决方案