关于CancellationToken的解释

  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()方法发送取消请求

 

原文地址:

https://www.cnblogs.com/mohanchen/p/9398031.html

posted @ 2020-08-12 12:02  RookieCoderAdu  阅读(1285)  评论(0编辑  收藏  举报