栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#Task取消任务执行CancellationTokenSource

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#Task取消任务执行CancellationTokenSource

CancellationTokenSource这个是取消的发送信号,CancellationTokenSource每次传入Task.Run的时候必须是新的对象,不能是已经被调用了CancellationTokenSource.Cancle(true)了的,不然Task.Run不会启动

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        /// 
        /// 取消任务信号
        /// 
        static CancellationTokenSource source = new CancellationTokenSource();
        static Task task1 = null;

        static void Main(string[] args)
        {
            Console.WriteLine("启动");
            TestTask();
            //2秒后取消task执行
            //Thread.Sleep(2000);
            //source.Cancel();

            //在指定的毫秒数后取消task执行
            source.CancelAfter(2 * 1000);
            //取消任务后,调用的委托
            source.Token.Register(() =>
            {
                //不延迟会获取不到正确的状态
                Thread.Sleep(50);
                Console.WriteLine("task1状态:" + task1.Status);
                Console.WriteLine("IsFaulted状态:" + task1.IsFaulted);
                Console.WriteLine("IsCompleted状态:" + task1.IsCompleted);
            });

            //Task.Run(() =>
            //{
            //    Task.Delay(3* 1000).Wait();
            //    Console.WriteLine("task1状态:" + task1.Status);
            //});

            Console.ReadKey();
        }
        public static void TestTask()
        {
            //CancellationTokenSource被使用过后必须要重新实例化(就是调用了一次CancellationTokenSource.cancellToken.Cancel(true);),不然下面的task不会执行启动
            task1 = Task.Run(() =>
            {
                Console.WriteLine("表示费时的操作");
                for (int i = 0; i < 100; i++)
                {
                    source.Token.ThrowIfCancellationRequested();
                    Console.WriteLine("执行中" + i);
                    Thread.Sleep(500);
                }
            }, source.Token);
        }

    }
}

执行结果:
启动
表示费时的操作
执行中0
执行中1
执行中2
执行中3
task1状态:Canceled
IsFaulted状态:False
IsCompleted状态:True

转载:
https://blog.csdn.net/htxhtx123/article/details/104192265

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号