【小白专用】C# Task 类异步操作-浅谈

注解
Task类表示不返回值并且通常以异步方式执行的单个操作。 Task 对象是在 .NET Framework 4 中首次引入的 基于任务的异步模式 的中心组件之一。 由于对象执行的工作 Task 通常在线程池线程上异步执行,而不是在主应用程序线程上同步执行,因此可以使用 Status 属性以及 IsCanceled 、 IsCompleted 和 IsFaulted 属性来确定任务的状态。 通常,lambda 表达式用于指定任务要执行的工作。

对于返回值的操作,请使用 Task<TResult> 类。

方法

Delay(Int32)    
创建一个在指定的毫秒数后完成的任务

Delay(Int32, CancellationToken)    
创建一个在指定的毫秒数后完成的可取消任务。

Delay(TimeSpan)    
创建一个在指定的时间间隔后完成的任务

Delay(TimeSpan, CancellationToken)    
创建一个在指定的时间间隔后完成的可取消任务。

依靠系统本身,在某个指定的时间点调用方法

static async Task Main()
{// 获取当前时间DateTime currentTime = DateTime.Now;// 计算下一个指定时间点DateTime targetTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 10, 0, 0); // 例如,每天的10点// 计算下一个指定时间点与当前时间的时间间隔TimeSpan delay = targetTime - currentTime;// 等待指定时间间隔await Task.Delay(delay);// 在指定时间点执行方法await ExecuteMethod();// 等待程序终止Console.WriteLine("按任意键退出...");Console.ReadKey();}static async Task ExecuteMethod()
{// 在这里执行你想要在指定时间点调用的方法Console.WriteLine("在指定时间点调用方法");// 可以在这里添加你的逻辑代码}

Run(Action)    
将在线程池上运行的指定工作排队,并返回代表该工作的 Task 对象。

Run(Action, CancellationToken)    
将在线程池上运行的指定工作排队,并返回代表该工作的 Task 对象。 可使用取消标记来取消工作(如果尚未启动)。

Run(Func<Task>)    
将在线程池上运行的指定工作排队,并返回 function 所返回的任务的代理项。

Run(Func<Task>, CancellationToken)    
将在线程池上运行的指定工作排队,并返回 function 所返回的任务的代理项。 可使用取消标记来取消工作(如果尚未启动)。

Run<TResult>(Func<Task<TResult>>)    
将指定的工作排成队列在线程池上运行,并返回由 function 返回的 Task(TResult) 的代理。 可使用取消标记来取消工作(如果尚未启动)。

        public static async Task Main(){await Task.Run(() => {// Just loop.int ctr = 0;for (ctr = 0; ctr <= 1000000; ctr++){ }Console.WriteLine("Finished {0} loop iterations",ctr);});}

Start()

启动 Task,并将它安排到当前的 TaskScheduler 中执行。

Start(TaskScheduler)

启动 Task,并将它安排到指定的 TaskScheduler 中执行。

        static void Main(string[] args){Action<object> action = (object obj) =>{Console.WriteLine("Task={0}, obj={1}, Thread={2}",Task.CurrentId, obj,Thread.CurrentThread.ManagedThreadId);};// Create a task but do not start it.Task t1 = new Task(action, "alpha");// Construct a started taskTask t2 = Task.Factory.StartNew(action, "beta");// Block the main thread to demonstrate that t2 is executingt2.Wait();// Launch t1 t1.Start();Console.WriteLine("t1 has been launched. (Main Thread={0})",Thread.CurrentThread.ManagedThreadId);// Wait for the task to finish.Console.ReadKey();}

Wait()    
等待 Task 完成执行过程。

Wait(CancellationToken)    
等待 Task 完成执行过程。 如果在任务完成之前取消标记已取消,等待将终止。

Wait(Int32)    
等待 Task 在指定的毫秒数内完成执行。

Wait(Int32, CancellationToken)    
等待 Task 完成执行过程。 如果在任务完成之前超时间隔结束或取消标记已取消,等待将终止。

Wait(TimeSpan)    
等待 Task 在指定的时间间隔内完成执行。

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

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

相关文章

【上篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史

YOLO 型号之所以闻名遐迩,主要有两个原因:其速度和准确性令人印象深刻,而且能够快速、可靠地检测图像中的物体。 在本文中,我将与大家分享我在阅读一篇长达 30 页的综合性论文时获得的见解,该论文深入探讨了 YOLO 模型的进步。 这篇评论全面概述了 YOLO 框架的演变过程,…

Python001

Python 是一种高级编程语言。它具有以下显著特点&#xff1a;1. 简单易学&#xff1a;语法相对简洁明了&#xff0c;对初学者很友好。2. 丰富的库&#xff1a;拥有大量强大的内置库和第三方库&#xff0c;可用于各种领域&#xff0c;如数据分析、机器学习、Web 开发等。3. 可读…

【无标题】 Notepad++ plugin JSONViewer 下载地址32位

JSONViewer download | SourceForge.net 1、下载插件压缩包并解压出dll&#xff1a;Jsonviewer2.dll&#xff08;64位&#xff09;或NPPJSONViewer.dll&#xff08;32位&#xff09;; 2.、拷贝对应dll到Notepad安装目录下的plugins目录。 3、重启Notepad程序&#xff0c;在插…

LeetCode刷题之HOT100之颜色分类

下午好呀&#xff0c;大家&#xff01;昨天估计是喝了假酒&#xff0c;现在没有胃口&#xff0c;喝酒真的没有任何好处。以后尽量避免此活动。今天几乎没睡觉&#xff0c;准备做完这题回宿舍&#xff0c;把电脑也带回去。 1、题目描述 2、逻辑分析 对颜色排序&#xff0c;要求…

读书笔记:左耳听风

程序员如何用技术变现 我完全没有必要通过打工听人安排而活着&#xff0c;而是反过来通过在公司工作提高自己的技能&#xff0c;让自己可以更为独立和自由地生活。 因而&#xff0c;在工作当中&#xff0c;对于那些没什么技术含量的工作&#xff0c;我基本上就像是在学生时代那…

NRF24L01(2.4G)模块的使用——SPI时序(软件)篇

一、SPI的简介&#xff1a; SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚…

安装ps提示vcruntime140.dll丢失的解决方法,总结5种解决方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcruntime140.dll”。这个问题可能会导致程序无法正常启动或运行&#xff0c;因此了解其原因和解决方法是非常必要的。小编将从多个方面对“找不到vcruntime140.dll”这一问题进行详细…

iBeacon赋能AR导航:室内定位技术的原理与优势

室内定位导航对于大型商场、机场、医院等复杂室内环境至关重要&#xff0c;它帮助人们快速找到目的地&#xff0c;提高空间利用率。AR技术通过将虚拟信息叠加在现实世界&#xff0c;提供直观导航指引&#xff0c;正在成为室内导航的新趋势&#xff0c;增强用户互动体验&#xf…

【算法训练记录——Day27】

Day27——回溯算法Ⅲ 1.组合总和2.组合总和II3.分割回文串 内容 ● 39.组合总和 ● 40.组合总和II ● 131.分割回文串 1.组合总和 思路&#xff1a;和组合总和一样&#xff0c;先从candidates中遍历选择元素&#xff0c;但是纵向递归时所选择元素要包括当前元素 vector<int&…

玩游戏时服务器遭到DDOS攻击崩溃,DDOS攻击是什么?

某网游服务器突然崩溃&#xff0c;大量玩家被迫下线。随后该游戏官方出面解释是因服务器遭遇了DDoS攻击&#xff0c;所以导致登录异常。这个DDoS攻击到底是哪里来的鬼怪&#xff0c;敢这么给自己加戏&#xff1f; 什么是DDoS攻击&#xff1f; DDoS攻击&#xff0c;专业表述是“…

【启程Golang之旅】协程和管道操作

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

积累常用css

1、封面文字&#xff0c;垂直居中&#xff0c;可以两列并排 font-size: 20px;font-weight: 600;color: #333;line-height: 20px;display: block;word-wrap: break-word;writing-mode: vertical-lr;height: 160px;margin: 0 auto; 2、宽border效果 .dashed-box { margin: 80px…

ubuntu22.04编译OpenCV4.9(带contrib-4.9.0)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;4.9.0 opencv_contrib版本&#xff1a;4.9.0 源码下载 OPenCV4.9.0下载地址&#xff1a;https://github.com/opencv/opencv/releases/tag/4.9.0 如下图所示&#xff1a; 按箭头所指点击下载source code(tar.gz)文件到…

从零开始实现自己的串口调试助手(9)-重置多文本框,保存/载入指令集

重置多文本框 添加多文本控件列表 在构造函数中把我们需要操作的控件归类到对应列表之中 //创建多文本存放数组 - 存放那三列内容 checkBox lineEdi btnfor(int i1;i<9;i){// 添加到按钮数组QString btnName QString("pushButton_t%1").arg(i); //构建对应控件名…

DSP问题:TMS320F280049延时和实际不符

1、问题现象 我之前写的一篇点灯文章&#xff0c;发现LED等闪烁频率和设想不一致&#xff0c;延时100ms&#xff0c;实际延时要更长。 2、问题原因 电路中使用的晶振是10MHz&#xff0c;实际代码中配置的是20MHz的晶振。 3、解决方案 修改代码中的晶振配置为10MHz即可。…

【Redis】Redis经典问题:缓存穿透、缓存击穿、缓存雪崩

目录 缓存的处理流程缓存穿透解释产生原因解决方案1.针对不存在的数据也进行缓存2.设置合适的缓存过期时间3. 对缓存访问进行限流和降级4. 接口层增加校验5. 布隆过滤器原理优点缺点关于扩容其他使用场景SpringBoot 整合 布隆过滤器 缓存击穿产生原因解决方案1.设置热点数据永不…

【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】

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

力扣hot100:394. 字符串解码(递归)

LeetCode&#xff1a;394. 字符串解码 本题容易想到用递归处理&#xff0c;在写递归时主要是需要明确自己的递归函数的定义。 不过我们也可以利用括号匹配的方式使用栈进行处理。 1、递归 定义递归函数string GetString(string & s,int & i); 表示处理处理整个numbe…

list模拟与实现(附源码)

文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造&#xff08;传统写法&#xff09;拷贝构造&#xff08;现代写法&#xff09; 源…