Main 程序[分别调用三个方法]

 static void Main(string[] args)
{
using (CancellationTokenSource cts = new CancellationTokenSource())
{
CancellationToken token = cts.Token;
ThreadPool.QueueUserWorkItem(p => AsyncOperation(token));
Thread.Sleep(TimeSpan.FromSeconds());
cts.Cancel();
}; //休眠两秒,否则主线程结束了,新的线程也会结束
Thread.Sleep(TimeSpan.FromSeconds());
}

方法一

 static void AsyncOperation(CancellationToken token)
{
Console.WriteLine("开始第一个任务");
for (int i = ; i < ; i++)
{
if (token.IsCancellationRequested)
{
Console.WriteLine(i + ":" + token.IsCancellationRequested.ToString());
return;
}
else
{
Console.WriteLine(i + ":" + token.IsCancellationRequested.ToString());
} Thread.Sleep(TimeSpan.FromSeconds());
}
Console.WriteLine("任务执行完成");
}

运行结果

方法二

 static void AsyncOperation2(CancellationToken token)
{
try
{
Console.WriteLine("开始第二个任务");
for (int i = ; i < ; i++)
{
token.ThrowIfCancellationRequested();
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine("第二个任务执行完成");
}
}
catch (OperationCanceledException ex)
{
Console.WriteLine("第二个任务被取消了");
}
}

运行结果:

方法三

  static void AsyncOperation3(CancellationToken token)
{
bool cancelflag = false;
token.Register(() => cancelflag = true);//被取消时cancelflag会设置为True
Console.WriteLine("开始第三个任务");
for (int i = ; i < ; i++)
{
if (cancelflag == true)
{
Console.WriteLine("第三个任务被取消了");
return;
}
else
{
Console.WriteLine(i + ":" + token.IsCancellationRequested.ToString());
}
Thread.Sleep(TimeSpan.FromSeconds());
}
Console.WriteLine("第三个任务执行完成"); }

运行结果:

CancellationTokenSource 和 CancellationToken 取消线程的更多相关文章

  1. 第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。

    一. 传统的线程取消 所谓的线程取消,就是线程正在执行的过程中取消线程任务. 传统的线程取消,是通过一个变量来控制,但是这种方式,在release模式下,被优化从cpu高速缓存中读取,而不是从内存中读 ...

  2. 创建CancellationTokenSource对象用于取消Task

    虽然使用线程池ThreadPool让我们使用多线程变得容易,但是因为是由系统来分配的,如果想对线程做精细的控制就不太容易了,比如某个线程结束后执行一个回调方法.恰好Task可以实现这样的需求.这篇文章 ...

  3. 在ASP.NET Core中用HttpClient(五)——通过CancellationToken取消HTTP请求

    ​用户向服务器发送HTTP请求应用程序页面是一种非常可能的情况.当我们的应用程序处理请求时,用户可以从该页面离开.在这种情况下,我们希望取消HTTP请求,因为响应对该用户不再重要.当然,这只是实际应用 ...

  4. C#协作试取消线程

    https://segmentfault.com/q/1010000017109927using System; using System.Collections.Generic; using Sys ...

  5. Linux学习笔记23——取消线程

    一 相关函数 1 发送终止信号 #include <pthread.h> int pthread_cancel(pthread_t thread); 2 设置取消状态 #include & ...

  6. C# CancellationTokenSource和CancellationToken的实现

    微软关于CancellationTokenSource的介绍很简单,其实CancellationTokenSource的使用也很简单,但是实现就不是那么简单了,我们首先来看看CancellationT ...

  7. pthread中取消线程

    取消线程:告诉一个线程关掉自己,取消操作允许线程请求终止其所在进程中的任何其他线程.不希望或不需要对一组相关的线程执行进一步操作时,可以选择执行取消操作.取消线程的一个示例是异步生成取消条件. 对于c ...

  8. linux下pthread_cancel无法取消线程的原因【转】

    转自:http://blog.csdn.net/huangshanchun/article/details/47420961 版权声明:欢迎转载,如有不足之处,恳请斧正. 一个线程可以调用pthrea ...

  9. linux下pthread_cancel无法取消线程的原因

    一个线程能够调用pthread_cancel终止同一进程中的还有一个线程,可是值得强调的是:同一进程的线程间,pthread_cancel向还有一线程发终止信号.系统并不会立即关闭被取消线程,仅仅有在 ...

随机推荐

  1. kafka 暂停消费

    1.代码实现 kafkaListener 需要指定id,例如这里是:full-part-id. @KafkaListener(topics = "part-full-topic", ...

  2. Spring Cloud Turbine微服务集群实时监控

    本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...

  3. SpringCloud项目启动报错:NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

    报错表象: 当启动SpringClud项目报错: Exception in thread "main" java.lang.NoClassDefFoundError: org/sp ...

  4. 图解python中赋值、浅拷贝、深拷贝的区别

    Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果.下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will = ...

  5. LeetCode 797. All Paths From Source to Target

    题目链接:https://leetcode.com/problems/all-paths-from-source-to-target/description/ Given a directed, ac ...

  6. jmeter接口测试-GET请求路径中包含特殊字符或中文导致Response400报错

    问题描述:接口测试中异常用例GET请求路径中包含特殊字符或中文,运行jmeter会报错,取样器中只能看到Response400,响应结果为空 解决思路: 对于通过BODY发送的中文内容可以用Jmete ...

  7. C#开发微信支付之企业向用户付款

    1.企业付款的介绍 所谓企业付款指的是,在功能开放后诸如保险行业的客户理赔.退保.商品退款.发放征集活动奖金.抽奖互动等操作都可以通过企业付款完成.而此前,微信支付只能提供客户向企业单向付款. 商户如 ...

  8. JAVA 中BIO,NIO,AIO的理解 (转)

    转自: http://qindongliang.iteye.com/blog/2018539 另外类似可参考资料 :http://www.360doc.com/content/13/1029/20/9 ...

  9. 微信公众号生成带参数的二维码asp源码下载

    晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入 ...

  10. uva_answers

    uva202: https://blog.csdn.net/lecholin/article/details/70163148 uva1589: https://blog.csdn.net/qq_42 ...