.NET 4并行(多核)编程系列之四 Task的休眠2012-02-13 博客园 小洋前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消。本篇介绍Task的休眠,本篇的内容比较的少。本篇的议题如下:1.Task的休眠。1.Task的休眠有时候,我们常常希望一个Task在等待一段时间之后再运行,也就有点类似之前多线程编程中的Sleep。我们可以设置一个Task休眠多长时间,当这个时间过了,Task就自动的唤醒接着运行。下面就讲讲休眠的方法:a.使用CancellationToken的Wait Handle:a)在.NET 4并行编程中,让一个Task休眠的最好的方式就是使用CancellationToken的等待操作(Wait Handle)。而且操作起来也很简单:首先创建一个CancellationTokenSource的实例,然后通过这个实例的Token属性得到一个CancellationToken的实例,然后在用CancellationToken的WaitHandle属性,然后调用这个这个属性的WaitOne()方法。其实在之前讲述”Task的取消”一文中就已经使用过。b)WaitOne()方法有很多的重载方法来提供更多的功能,例如可以传入一个int的整数,表明要休眠多长的时间,单位是微秒,也可以传入一个TimeSpan的值。如果调用了CancellationToken的Cancel()方法,那么休眠就立刻结束。就是因为这个原因,我们之前的文章讲过,WaitOne()可以作为检测Task是否被取消的一个方案下面来看一段示例代码:代码static void Main(string[] args) { // create the cancellation token source CancellationTokenSource tokenSource = new CancellationTokenSource(); // create the cancellation token CancellationToken token = tokenSource.Token; // create the first task, which we will let run fully Task task1 = new Task(()=> { for (int i = 0; i < Int32.MaxValue; i++) { // put the task to sleep for 10 seconds bool cancelled = token.WaitHandle.WaitOne(10000); // print out a message Console.WriteLine("Task 1 - Int value {0}.Cancelled? {1}", i, cancelled); // check to see if we have been cancelled if (cancelled) { throw new OperationCanceledException(token); } } }, 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(); }