C# 异步方法async / await 任务超时处理

一、需求

如果调用一个异步方法后,一直不给返回值结果怎么办呢?这就涉及到怎么取消任务了。

二、Task取消任务

 static CancellationTokenSource source = new CancellationTokenSource();static void Main(string[] args){Task.Run(() =>{for (int i = 0; i < 10; i++){Thread.Sleep(500);Console.WriteLine("oh my god");source.Token.ThrowIfCancellationRequested();}}, source.Token);Thread.Sleep(2000);Console.WriteLine("取消任务");source.Cancel();Console.ReadKey();}

换一个写法

static void Main(string[] args){bool isOut = false;var task1 = Task.Run(() =>{for (int i = 0; i < 100; i++){if (isOut) return;Console.WriteLine("执行中" + i);Thread.Sleep(500);}});Thread.Sleep(2000);Console.WriteLine("取消任务");isOut = true;Console.ReadKey();}

 我在 for 循环中加入一个判断,如果等于 true,直接跳出循环,这不也可以中断任务

三、Task取消任务的回调

取消任务也是可以加入回调的,如下:

 static CancellationTokenSource source = new CancellationTokenSource();static void Main(string[] args){var task1 = Task.Run(() =>{for (int i = 0; i < 100; i++){source.Token.ThrowIfCancellationRequested();Console.WriteLine("执行中" + i);Thread.Sleep(500);}}, source.Token);//在指定的毫秒数后取消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);//获取一个值,该值指示任务是否已完成。});Console.ReadKey();}

四、Task超时处理的实现

先来一个超时取消后续代码执行的方法

 private static CancellationTokenSource Cancellation = new CancellationTokenSource();static void Main(string[] args){//设置超时的时间Cancellation.CancelAfter(TimeSpan.FromSeconds(1));Task.Run(() =>{try{Console.WriteLine("方法执行开始");//异步 Task.Delay 可以这么写,await Task.Delay(3000, Cancellation.Token)//效果同 Cancellation.Token.ThrowIfCancellationRequested() //await Task.Delay(3000, Cancellation.Token);Thread.Sleep(2000);Cancellation.Token.ThrowIfCancellationRequested();Console.WriteLine("方法执行结束");}catch (OperationCanceledException){Console.WriteLine("取消操作");}});Console.ReadKey();}

可以看到,方法执行结束这段代码并没有打印,这就是我们想要的效果了,在上面我们设置的超时时间是1秒,在后面的执行中,使用了线程睡眠时间是2秒,超时后,就自动取消操作了

把超时时间改为3秒,看看效果

private static CancellationTokenSource Cancellation = new CancellationTokenSource();
static void Main(string[] args)
{//设置超时的时间Cancellation.CancelAfter(TimeSpan.FromSeconds(3));Task.Run(() =>{try{Console.WriteLine("方法执行开始");//异步 Task.Delay 可以这么写,await Task.Delay(3000, Cancellation.Token)//效果同 Cancellation.Token.ThrowIfCancellationRequested() //await Task.Delay(3000, Cancellation.Token);Thread.Sleep(2000);Cancellation.Token.ThrowIfCancellationRequested();Console.WriteLine("方法执行结束");}catch (OperationCanceledException){Console.WriteLine("取消操作");}});Console.ReadKey();}

这回就没有取消任务的执行了,那么超时取消代码执行的效果就实现了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Responder工具

简介 Responder是一种网络安全工具&#xff0c;用于嗅探和抓取网络流量中的凭证信息&#xff08;如用户名、密码等&#xff09;。它可以在本地网络中创建一个伪造的服务&#xff08;如HTTP、SMB等&#xff09;&#xff0c;并捕获客户端与该服务的通信中的凭证信息。 Responder工…

路由器作为网络扩展器——设置桥接、路由模式

下面提到的路由器都是家用路由器 一、有线桥接(交换模式) 1.连接示意图 (副路由器只看交换模式部分) 副路由器充当交换机的角色 二、无线桥接(与有线类似) &#xff08;副路由器的无线信号 连接 主路由器的无线信号&#xff09; 三、路由模式 1.连接示意图 (副路由器只看…

扩散模型条件生成——Classifier Guidance和Classifier-free Guidance原理解析

1、前言 从讲扩散模型到现在。我们很少讲过条件生成&#xff08;Stable DIffusion曾提到过一点&#xff09;&#xff0c;所以本篇内容。我们就来具体讲一下条件生成。这一部分的内容我就不给原论文了&#xff0c;因为那些论文并不只讲了条件生成&#xff0c;还有一些调参什么的…

【python】python电影评论数据抓取分析可视化(源码+数据+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

探索教研在线平台的系统架构

教研在线平台作为一家致力于教育技术领域的企业&#xff0c;其系统架构扮演着至关重要的角色。本文将深入探讨教研在线平台的系统架构&#xff0c;从技术架构、数据架构和安全架构等方面进行分析&#xff0c;以期帮助读者更好地理解这一教育科技平台的运作模式。 技术架构是教研…

银河麒麟操作系统通过首批软件供应链安全能力认证

麒麟软件产品供应链安全能力获双重肯定&#xff01;5月30日&#xff0c;经北京赛迪认证中心评估&#xff0c;银河麒麟高级服务器操作系统V10和银河麒麟桌面操作系统V10成为首批获得软件供应链安全能力认证产品&#xff0c;并在操作系统类产品中名列前茅。 软件供应链安全能力评…

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

【Unity UGUI】Screen.safeArea获取异形屏数据失败

Screen.safeArea获取不到异形屏的尺寸位置等数据 检查AndroidManifest.xml文件是否有设置&#xff1a;android:theme"style/UnityThemeSelector"&#xff0c;没有加上即可 android:theme"style/UnityThemeSelector"

【学习笔记】Windows GDI绘图(十二)双缓冲管理(用GIF动画测试)

文章目录 引言默认双缓冲SetStyle 手动管理双缓冲图形BufferedGraphicsManager缓冲图形管理器BufferedGraphicsContext 缓冲图形上下文BufferedGraphics 图形缓冲区验证双缓冲的效果(Gif动画显示非正常速度)结束语性能对比 引言 图形编程中一个常见的问题就是闪烁&#xff0c;…

SpringBoot高手之路-springboot原理篇

配置文件优先级 SpringBoot原理篇-多环境配置

[职场] 社保和商业保险有什么区别?可以只买商保不买社保吗? #微信#经验分享#媒体

社保和商业保险有什么区别&#xff1f;可以只买商保不买社保吗&#xff1f; 我们在提到社保和商业保险时&#xff0c;经常会听到这样一句话&#xff1a;“社保是基础&#xff0c;商保是补充。” 为什么会这样说呢&#xff1f;社保和商保有什么区别呢&#xff1f;今天&#xf…

Springboot 通过SSE 实现实时消息返回

网上搜了好多都是用 SseEmitter 实现的,自己搭的demo确实也可以了,但是我项目里有一个过滤器,死活配置都不行,终于用google搜了一下,第一篇帖子便解决了这个问题,代码和大佬链接如下: https://github.com/CodingChaozhang/spring_boot_practice_demo/blob/master/springboot_s…

XR和Steam VR项目合并问题

最近有一个项目是用Steam VR开发的&#xff0c;里面部分场景是用VRTK框架做的&#xff0c;还有一部分是用SteamVR SDK自带的Player预制直接开发的。 这样本身没有问题&#xff0c;因为最终都是通过SteamVR SDK处理的&#xff0c;VRTK也管理好了SteamVR的逻辑&#xff0c;并且支…

数据结构之初识泛型

目录&#xff1a; 一.什么是泛型 二.引出泛型 三.泛型语法及&#xff0c;泛型类的使用和裸类型(Raw Type) 的了解 . 四.泛型的编译&#xff1a; 五.泛型的上界 六.泛型方法 注意&#xff1a;在看泛型之前可以&#xff0c;回顾一下&#xff0c;包装类&#xff0c;包装类就是服务…

JSP中连接数据库MySQL

JSP中连接数据库MySQL 一、软件环境 下载并安装MySQL&#xff0c;Tomacat&#xff0c;JDBC、IDEA或其他IDE&#xff0c;本文使用IDEA 二、环境配置 将其环境变量配置好之后&#xff0c;下载Java 专用的连接MySQL的驱动包JDBC。 下载链接&#xff1a;https://dev.mysql.com/…

AI高考大战,揭秘五大热门模型谁能问鼎数学之巅?

在高考前&#xff0c;我就有想法了&#xff0c;这一次让AI来做做高考题。就用国内的大模型&#xff0c;看哪家的大模型解题最厉害。 第一天考完&#xff0c;就拿到了2024高考数学2卷的电子版&#xff0c;这也是重庆市采用的高考试卷 这次选了5个AI工具&#xff0c;分别是天工&a…

帕友饮食改善的小建议!

一、增加膳食纤维的摄入 帕金森病患者应增加膳食纤维的摄入量&#xff0c;以帮助调节肠道功能&#xff0c;预防便秘。膳食纤维丰富的食物包括蔬菜、水果、全谷类食物等。患者应确保每天摄入足够的膳食纤维&#xff0c;以保持肠道通畅&#xff0c;缓解帕金森病可能带来的消化不…

[AIGC] Springboot 自动配置的作用及理由

在详细解释SpringBoot的自动配置之前&#xff0c;先介绍以下背景知识。在创建现代复杂的应用程序时&#xff0c;一个困难的部分是正确地设置您的开发环境。这个问题尤其在Java世界中尤为突出&#xff0c;因为您必须管理和配置许多独立的标准和技术。 当我们谈论Spring Boot的自…

【Unity】官方文档学习-光照系统

目录 1 前言 2 光照介绍 2.1 直接光与间接光 2.2 实时光照与烘焙光照 2.3 全局光照 3 光源 3.1 Directional Light 3.1.1 Color 3.1.2 Mode 3.1.3 Intensity 3.1.4 Indirect Multiplier 3.1.5 Shadow Type 3.1.6 Baked Shadow Angle 3.1.7 Realtime Shadows 3.1…

数据挖掘--分类

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性&#xff1a;基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析&#xff1a;基本概念和方法 基本概念 决策树归纳 决策树:决策树是一…