cancellationToken以一种token的形式来取消当前task
例如:
private static Int32 NumValue(CancellationToken token, Int32 n) { Int32 sum = 0; for (int i = 0; i < n; i++) { token.ThrowIfCancellationRequested(); checked { sum += i; } } return sum; }
此方法接受了一个CancallationToken属性,使用它的ThrowIfCancellationRequested检测取消操作,若用户取消则抛出一个异常结束求和的task
新建一个CancellationTokenSource实例,产生一个CancellationToken对象并将其传入上面的NumValue作为参数,代码如下:
private static void TaskRun() { CancellationTokenSource tokenSource = new CancellationTokenSource(); Task<Int32> task = Task.Run(() => NumValue(tokenSource.Token, 1000000), tokenSource.Token); //发出取消的请求 tokenSource.Cancel(); try { Console.WriteLine("计算求和为:{0}",task.Result); } catch (AggregateException ex) { ex.Handle(e => e is OperationCanceledException); Console.WriteLine("用户已取消"); } }
调用Cancel()方法发送取消请求
原文地址: