C# Task 暂停与取消
前言:
①取消task任务之CancellationTokenSource的用法;
②task的线程管控方法Task..Wait(time),Task.WaitAll(), Task.WaitAny(),task.ContinueWith.
1.声明参数
CancellationTokenSource tokenSource = new CancellationTokenSource();CancellationToken token = tokenSource.Token;ManualResetEvent resetEvent = new ManualResetEvent(true);
2.定义Task
Task task = new Task(async () => {while (true) { if (token.IsCancellationRequested) {return;}// 初始化为true时执行WaitOne不阻塞resetEvent.WaitOne();// Doing something.......// 模拟等待100msawait Task.Delay(100);}}, token);task.Start();
3.暂停Task
resetEvent.Reset();
4.继续Task
resetEvent.Set();
5.取消Task
tokenSource.Cancel();
实例:
#region TASK用法举例static void TasKTest(){//带返回值的taskTask<String> mytask = Task.Run(async () =>{await Task.Delay(5000);return "老铁666";}, cancellationToken.Token);//cancellationToken.Cancel();while (!mytask.Wait(100)) //在指定时间执行完成就返回true{Console.Write(".");}Console.WriteLine(mytask.Result);//task任务取消,所以获取task.Result会报错Task taskFactory = Task.Factory.StartNew(() =>{Thread.Sleep(1000);Console.WriteLine("perfect!");});Console.WriteLine(taskFactory.Status);taskFactory.Wait();//taskFactory任务完成才往下执行Task.WaitAll(mytask, taskFactory);//所有任务完成再往下执行Task.WaitAny(mytask, taskFactory);//任一任务完成就往下执行Console.WriteLine(taskFactory.Status);Task taskTest = taskFactory.ContinueWith(DoOnSecond);//ContinueWith用法举例}static void DoOnSecond(Task t){Console.WriteLine("task {0} finished", t.Id);Console.WriteLine("this task id {0}", Task.CurrentId);Console.WriteLine("do some cleanup");}#endregion
进技术交流群的,加小编微信zls20210502,切记备注:进群!
历史经典文章回顾:以下都是以往阅读量好,比较经典的篇章!(下面是超链接,点击就可以过去)
C# 看懂这100+行代码,你就真正入门了(经典)
C# WPF项目实战(经典)
C# NOPI 项目实战(经典)(可下载项目源码)WPF【框架学习】MVVM初探(经典)
C# action,delegate,func的用法和区别
C#接口的作用(经典)
C# 三种方式实现Socket数据接收(经典)
C#实例(经典):四路光电开关&激光雷达数据采集和波形图绘制
C# Task 暂停与取消相关推荐
- 通过IEnumerable和IDisposable实现可暂停和取消的任务队列
一般来说,软件中总会有一些长时间的操作,这类操作包括下载文件,转储数据库,或者处理复杂的运算. 一种处理做法是,在主界面上提示正在操作中,有进度条,其他部分不可用.这里带来很大的问题, 使用者不知道到 ...
- IOS开发教程第一季之03多线程day3--最大并发数,队列的暂停,取消和恢复、操作优先级、线程监听、多线程下UITableView显示图片案例
1.NSOperation–最大并发数 什么是并发数 同时执行的任务数,比如同时开3个线程执行3个任务,并发数就是3 最大并发数的相关方法 -(NSInteger)maxConcurrentOpera ...
- sklearn.externals.joblib.externals.loky.process_executor.BrokenProcessPool: A task has 未能取消序列化
背景 在做硕士毕业设计的时候,用到随机森林这个模型,在写完代码的时候,跑的时候,老是出现sklearn.externals.joblib.externals.loky.process_executor ...
- 计算机正在在更新怎么停止运行,Win10系统更新到一半该怎么暂停或取消呢?
Haley 于 2020/07/14更新 备份&还原 摘要 你知道怎么在Windows更新执行后取消更新吗?仔细阅读下文,你就会知道如何终止执行中的Windows 10 更新了.如果你想以最安 ...
- Task和async/await详解
一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...
- C#多线程和异步(二)——Task和async/await详解
一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...
- 你想象中的Task后续,很简单?
[导读]前不久,写过一篇关于Task的简短文章,通过评论和转载得到好评,刚好我昨晚又写了一篇实现简单的消息队列也提到了Task,难道不应该是看具体执行什么操作,再考虑最佳方案?本文我们再次通过简短内容 ...
- 【转】Task和async/await详解
一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...
- C# Task和async/await详解
C# Task和async/await详解 什么是异步 Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 1 Thread阻塞线程的方法 2 T ...
最新文章
- stm32内部的CAN总线
- mysql查询语句判断日期_mysql语句查询时间检测
- 基本明白了什么是冲突域和广播域
- java常用class类_java常用类
- Pytorch数据的读取与存储
- DELL服务器R730重装Window Server2012系统
- 中科院-杨力祥视频教程	04课程
- 三层交换机配置的步骤
- 2019年互联网寒冬,带你走进真实的面试杀出重围
- OpenLayers多源数据加载一:数据组织
- springboot 简单集成mybatis 及所遇到问题解决方法
- 聚焦扶贫,爱在瑶山,深圳市华南物流商会在行动
- statsmodels︱python常规统计模型库
- 华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和nova8se的详细对比参数对比
- C# 实现xls类型转换为xlsx类型
- 设计一个形状类(接口)Shape,方法:求周长和求面积
- 一加7t人脸识别_一加7T深度测评:它体现了最佳的技术价值吗?
- 串口通信中一些常用的小工具
- 一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。
- oracle查看dblink信息,找出调用DBLINK的SESSION信息