.NET 4.5 中包含取消架構,允許以標準方式取消長時間運行的任務。每個阻塞調用都應支持這種機制。但目前,并不是所有阻塞調用都實現了這個新技術。已經實現了這種機制的技術有任務(http://www.cnblogs.com/afei-24/p/6907840.html),并發(fā)集合類(http://www.cnblogs.com/afei-24/p/6836976.html),并行LINQ(http://www.cnblogs.com/afei-24/p/6860753.html)和幾種同步機制。
取消架構基于協(xié)作行為,它不是強制的。長時間運行的任務會檢查它是否被取消,并返回控制權。
支持取消的方法接受一個CancellationToken參數。這個類定義了IsCancellationRequested屬性,其中長時間運行的操作可以檢查它是否應終止。使用Register()方法注冊一個將在取消此 System.Threading.CancellationToken 時調用的委托。它在調用Cancel()方法取消操作時調用。
1.Parallel.For()方法的取消
Parallel類提供了For()方法的重載版本,在重載版本中,可以傳遞ParallelOptions類型的參數。使用ParallelOptions類型,可以傳遞一個CancellationToken參數。CancellationToken參數通過創(chuàng)建CancellationTokenSource來生成。由于CancellationTokenSource實現了ICancelableOperation接口,因此可以用CancellationToken注冊,并允許使用Cancle(),CancleAfter()等方法取消操作。
示例:
static void CancelParallelFor() { var c