C# Task Cancel,CancellationTokenSource.IsCancellationRequested

 public partial class Form1 : Form
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        public Form1()
        {
            InitializeComponent();
        }

        private void StartClick(object sender, EventArgs e)
        {
            Task testTask = Task.Run(() =>
            {
                while (!cts.IsCancellationRequested)
                {
                    string str = $"{DateTime.Now.ToString("yyyyMMddHHmmssffff")},{Guid.NewGuid().ToString()}";
                    BeginInvoke(new Action(() =>
                    {
                        listBox1.Items.Add(str);
                    }));
                    Thread.Sleep(500);
                }
            }, cts.Token);
        }

        private void CancelClick(object sender, EventArgs e)
        {
            cts.Cancel();
            string str = "Task cancelled";
            listBox1.Items.Add(str);
        }
    }
public partial class Form1 : Form
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        List<string> lbList = new List<string>();
        public Form1()
        {
            InitializeComponent();
            listBox1.DataSource = lbList;
        }

        private void StartClick(object sender, EventArgs e)
        {
            Task testTask = Task.Run(() =>
            {
                while (!cts.IsCancellationRequested)
                {
                    string str = $"{DateTime.Now.ToString("yyyyMMddHHmmssffff")},{Guid.NewGuid().ToString()}";
                    BeginInvoke(new Action(() =>
                    {
                        lbList.Add(str);
                        listBox1.DataSource = null;
                        listBox1.DataSource = lbList;
                    }));
                    Thread.Sleep(500);
                }
            }, cts.Token);
        }

        private void CancelClick(object sender, EventArgs e)
        {
            cts.Cancel();
            string str = "Task cancelled";
            BeginInvoke(new Action(() =>
            {
                lbList.Add(str);
                listBox1.DataSource = null;
                listBox1.DataSource = lbList;
            }));
        }
    }
 public partial class Form1 : Form
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        List<string> lbList = new List<string>();
        public Form1()
        {
            InitializeComponent();
            listBox1.DataSource = lbList;
        }

        private void StartClick(object sender, EventArgs e)
        {
            Task testTask = Task.Run(() =>
            {
                while (!cts.IsCancellationRequested)
                {
                    AddContentToLBx();
                }
            }, cts.Token);
        }

        int i = 0;

        private void AddContentToLBx()
        {
            for(i=0;i<10000;i++)
            {
                string str = $"i={i},{DateTime.Now.ToString("yyyyMMddHHmmssffff")},{Guid.NewGuid().ToString()}";
                BeginInvoke(new Action(() =>
                {
                    lbList.Add(str);
                    listBox1.DataSource = null;
                    listBox1.DataSource = lbList;
                }));
                Thread.Sleep(500);
                if (cts.IsCancellationRequested)
                {
                    break;
                }
            }
        }

        private void CancelClick(object sender, EventArgs e)
        {
            cts.Cancel();
            string str = $"i={i},Task cancelled";
            BeginInvoke(new Action(() =>
            {
                lbList.Add(str);
                listBox1.DataSource = null;
                listBox1.DataSource = lbList;
            }));
        }
    }

原文地址:https://www.cnblogs.com/Fred1987/p/12665044.html

时间: 2024-08-30 14:57:19

C# Task Cancel,CancellationTokenSource.IsCancellationRequested的相关文章

异步和多线程,委托异步调用,Thread,ThreadPool,Task,Parallel,CancellationTokenSource

1 进程-线程-多线程,同步和异步2 异步使用和回调3 异步参数4 异步等待5 异步返回值 5 多线程的特点:不卡主线程.速度快.无序性7 thread:线程等待,回调,前台线程/后台线程, 8 threadpool:线程池使用,设置线程池,ManualResetEvent9 Task初步接触 10 task:waitall waitany continueWhenAny continueWhenAll  11并行运算Parallel 12 异常处理.线程取消.多线程的临时变量和lock13 A

TPL Part 1 Task 的使用

创建Task //1. 使用Action Task task1 = new Task(newAction(printMessage)); // 使用匿名代理 Task task2 = new Task(delegate { printMessage(); }); // 使用Lambda Task task3 = new Task(() =>printMessage()); // 使用匿名代理 Task task4 = new Task(() => { printMessage(); }); 还

C#多线程和异步——Task和async/await详解

阅读目录 一.什么是异步 二.Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 3 Task的延续操作(WhenAny/WhenAll/ContinueWith) 4 Task的任务取消(CancellationTokenSource) 三.异步方法(async/await) 回到顶部 一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时

Task和async/await详解

一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法. 异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果.较耗时的任务设为异步执行,可以提高程序的运行效率.net4.0在ThreadPool的基础上推出了Task类,微软极力推荐使用Task来执行异步

多线程随笔二(Task)

Task类是.net 4.0新加进来的特性,对原有的Thread,ThreadPool做了进一步的封装,使得.net平台上的多线程编程变得更加方便.废话不多说,进入正题. 一. Task启动 Task启动主要有以下几种用法: 1.构造Task对象,启动Task 1 Task myTask = new Task(DoSomething); 2 myTask.Start(); 2.通过Task.Factory启动Task Task second = Task.Factory.StartNew(DoS

python asyncio 关闭task

import asyncio import time async def get_html(sleep_times): print("waiting") await asyncio.sleep(sleep_times) print("done after {}s".format(sleep_times)) if __name__ == "__main__": task1 = get_html(2) task2 = get_html(3) task

【12.2】task取消和子协程调用原理

task取消 1 import asyncio 2 import time 3 4 5 async def get_html(sleep_time): 6 print('waiting') 7 await asyncio.sleep(sleep_time) 8 print('done after {}s'.format(sleep_time)) 9 10 11 if __name__ == '__main__': 12 task1 = get_html(2) 13 task2 = get_htm

.NET4.0多线程编程---Cooperative Cancellation

在多线程编程中线程池是不得不提的,在.net4.0之前一般对于线程池的说法是,把需要的线程交给线程池,我们自己将更多的关注点放在业务上,个人认为这既是线程池的优点也是缺点---加入线程池之后人为无法控制,也没有内在的方法告知线程的执行结果. 今天早晨拜读了Jeffrey的著作26th章.根据自己的理解今天主要学习“如何取消线程池中的线程”. 首先介绍System.Thread命名空间下面的两个类: CancellationToken ,其实这是一个结构,它主要传播有关应取消操作的通知. Canc

Compute Resource Consolidation Pattern 计算资源整合模式

Consolidate multiple tasks or operations into a single computational unit. This pattern can increase compute resource utilization, and reduce the costs and management overhead associated with performing compute processing in cloud-hosted applications