原文:.NET 4 并行(多核)编程系列之四 Task的休眠

.NET 4 并行(多核)编程系列之四 Task的休眠

  前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消。本篇介绍Task的休眠,本篇的内容比较的少。

  本篇的议题如下:

  秒钟之后就打印出一条信息。在例子中,在我们敲一下键盘之后,CancellationToken就会被Cancel,此时休眠就停止了,task重新唤醒,只不过是这个task将会被cancel掉。

  有一点要注意:WaitOne()方法只有在设定的时间间隔到了,或者Cancel方法被调用,此时task才会被唤醒。如果如果cancel()方法被调用而导致task被唤醒,那么CancellationToken.WaitHandle.WaitOne()方法就会返回true,如果是因为设定的时间到了而导致task唤醒,那么CancellationToken.WaitHandle.WaitOne()方法返回false。

微秒。如果采用的是之前的第一种休眠方法,那么不管WaitOne()中设置了多长的时间,只要token.Cancel()被调用,那么task就像内部的Scheduler发出了cancel的请求,而且task会被cancel。

);
                    // print out a message
                    Console.WriteLine("Task 1 - Int value {0}", i);
                    // check for task cancellation
                    token.ThrowIfCancellationRequested();
                }
            }, token);

            // start task
            task1.Start();

            // wait for input before exiting
            Console.WriteLine("Press enter to cancel token.");

            Console.ReadLine();
            // cancel the token
            tokenSource.Cancel();

            // wait for input before exiting
            Console.WriteLine("Main method complete. Press enter to finish.");
            Console.ReadLine();
        }

  代码中我们在Thread.SpinWait()方法中传入一个整数,这个整数就表示CPU时间片轮转的次数,至于要等待多长的时间,这个就和计算机有关了,不同的计算机,CPU的轮转时间不一样。自旋等待的方法常常于获得同步锁,后续会讲解。使用自旋等待会一直占用CPU,而且也会消耗CPU的资源,更大的问题就是这个方法会影响Scheduler的运作。

  今天就写道这里:后续文章将会逐一讲解:Task的等待完成操作,Task中的异常处理,获取Task的状态,执行Lazily Task,常见问题解决方案

  版权为和博客园所有,转载请标明出处给作者。

  http://www.cnblogs.com/yanyangtian

05-04 02:00