1. 操作取消

1.1 步骤

  • 实例化 CancellationTokenSource 对象,该对象管理取消通知并将其发送给单个取消标记
  • 将 CancellationTokenSource.Token 属性返回的标记传递给每个侦听取消的任务或线程
  • 为每个任务或线程提供响应取消的机制

    if (token.IsCancellationRequested)
  • 调用 CancellationTokenSource.Cancel 方法以提供取消通知

1.2 代码示例

using System;
using System.Threading; public class Example
{
public static void Main()
{
CancellationTokenSource cts = new CancellationTokenSource(); ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomeWork), cts.Token);
Thread.Sleep(2500); cts.Cancel();
Console.WriteLine("Cancellation set in token source..."); Thread.Sleep(2500);
cts.Dispose();
} static void DoSomeWork(object obj)
{
CancellationToken token = (CancellationToken)obj; for (int i = 0; i < 100000; i++)
{
if (token.IsCancellationRequested)
{
Console.WriteLine("在 i 为 {0} 时, 监听到 cancellation", i);
break;
}
Thread.SpinWait(500000);
}
}
}
// 上诉例子输出:
// Cancellation set in token source...
// In iteration 1935, cancellation has been requested...

2. 对象取消

类似于事件的订阅和触发

using System;
using System.Threading; class CancelableObject
{
public string id; public CancelableObject(string id)
{
this.id = id;
} public void Cancel()
{
Console.WriteLine("Object {0} Cancel callback", id);
}
} public class Example
{
public static void Main()
{
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token; var obj1 = new CancelableObject("1");
var obj2 = new CancelableObject("2"); token.Register(() => obj1.Cancel());
token.Register(() => obj2.Cancel()); cts.Cancel();
cts.Dispose();
}
}
// 上诉将输出:
// Object 2 Cancel callback
// Object 1 Cancel callback

C# 应用 - 多线程 4) Task cancel的更多相关文章

  1. 【多线程】 Task ,async ,await

    [多线程]Task ,async ,await 一. WinForm 里经常会用到多线程, 多线程的好出就不多说了,来说说多线程比较麻烦的地方 1. UI 线程与其他线程的同步,主要是 Form 和 ...

  2. 【多线程】 Task

    [多线程] Task 一. 常用方法: 1. ContinueWith : 当前 Task 完成后, 执行传入的 Task 2. Delay : 创建一个等待的 Task,只有在调用 Wait 方法时 ...

  3. 多线程(4)Task

    使用线程池使得创建线程已经很简单了,但是使用线程池不支持线程的取消,完成和失败通知等交互操作,为了解决这些问题,.net 4.0带来了TPL(Task Parallel Library)任务并行库,下 ...

  4. C#多线程编程のTask(任务全面解析)

    Task是.NET4.0加入的,跟线程池ThreadPool的功能类似,用Task开启新任务时,会从线程池中调用线程,而Thread每次实例化都会创建一个新的线程. 我们可以说Task是一种基于任务的 ...

  5. .Net 多线程 (1) Task

    多线程是一种有效提高程序工作效率的方法.当然为了效率需要使用更多的cpu,内存等资源. 并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,如果串行,一个队列使用一台咖啡机,那么哪怕前 ...

  6. 【多线程】Task

    介绍 Task是.NET推出数据任务处理的工作类.位于System.Threading.Tasks命名空间下,通过命名空间也可以看出是个多线程类. 创建Task: Task有很多构造函数,无参有参都有 ...

  7. C# 应用 - 多线程 3) Task.Factory

    1. 与 Task.Run() 的区别: 先看一下源码: public class Task : IThreadPoolWorkItem, IAsyncResult, IDisposable { pu ...

  8. .NET多线程(Thread,ThreadPool,Task,Async与Await)

    .NET多线程是什么? 进程与线程 进程是一种正在执行的程序. 线程是程序中的一个执行流. 多线程是指一个程序中可以同时运行多个不同的线程来执行不同的任务. .NET中的线程 Thread是创建和控制 ...

  9. Task/Parallel实现异步多线程

    代码: #region Task 异步多线程,Task是基于ThreadPool实现的 { //TestClass testClass = new TestClass(); //Action<o ...

随机推荐

  1. 力扣567.字符串的排列—C语言实现

    题目 来源:力扣(LeetCode)

  2. kubernetes进阶(三)服务发现-coredns

    服务发现,说白了就是服务(应用)之间相互定位的过程. 服务发现需要解决的问题: 1.服务动态性强--容器在k8s中ip变化或迁移 2.更新发布频繁--版本迭代快 3.支持自动伸缩--大促或流量高峰 我 ...

  3. woj1016 cherry blossom woj1017 Billiard ball 几何

    title: woj1016 cherry blossom date: 2020-03-18 20:00:00 categories: acm tags: [acm,几何,woj] 几何题,判断给出的 ...

  4. codeforces 1039B Subway Pursuit【二分+随机】

    题目:戳这里 题意:一个点在[1,n]以内,我们可以进行4500次查询,每次查询之后,该点会向左或向右移动0~k步,请在4500次查询以内找到该点. 解题思路:一边二分,一边随机. 交互题似乎有好多是 ...

  5. HLOD System

    1.1 HLOD System简介 首先,HLOD System主要的目标是为了减少Draw Call.然后,进行更多的Batch批处理,从而大大提高渲染性能,减少面数和纹理,这样我们相应地节省了内存 ...

  6. certbot 获取数字证书失效问题

    title: certbot 获取数字证书失效问题 author: Narule date: 2021-02-18 10:45:00 +0800 categories: [Technology^技术, ...

  7. CSS Grid Layout In Action

    CSS Grid Layout In Action CSS 异形网格布局实战 refs https://static-nginx-online.fbcontent.cn/tutor/tutor-ybc ...

  8. Self-publishing 自出版

    Self-publishing 自出版 出书 传统出版 在过去的几十年中,发布意味着要经过代理商和发布者. 自出版 如今,自助出版允许作者绕过出版商和书店,直接向公众出售. refs https:// ...

  9. vue & watch props

    vue & watch props bug OK watch: { // props // chatObj: () => { // // bug // log(`this.chatObj ...

  10. TypeScript 3.7 RC & Nullish Coalescing

    TypeScript 3.7 RC & Nullish Coalescing null, undefined default value https://devblogs.microsoft. ...