首页 > 其他分享 >Task的基本概念、使用方法和实例代码

Task的基本概念、使用方法和实例代码

时间:2023-07-12 12:01:38浏览次数:28  
标签:异步 Task Console 实例 WriteLine Run 基本概念 Wait

基本概念

是一种用于异步编程的概念。Task的重要特点是可以在后台执行方法或操作,而不会阻塞主线程或UI线程。

封装的异步操作,表示执行的操作正在进行。可以表示一个方法的返回值或者表示执行的操作已经完成。

Task类的主要成员

    • 属性:TaskStatus、IsCanceled、IsCompleted、IsFaulted、Exception等
    • 方法:Start()、RunSynchronously()、Wait()、WaitAll()、WaitAny()等
    • 事件:Completed、Canceled、Faulted等

Task的使用方法

    1. 使用Task.Factory.StartNew()创建Task
    1. 异步运行一个方法或Lambda表达式,立即返回Task对象,然后异步执行方法或Lambda表达式
    1. 使用Task.Run()创建Task
    2. 使用TaskCompletionSource创建Task
    1. TaskCompletionSource是一个类,允许我们手动创建并控制异步返回值的Task对象。通常,异步操作的返回值是在异步操作完成时由异步方法设置的,但如果需要手动设置异步操作的返回值,可以使用TaskCompletionSource
    1. Task的等待和结果获取
    1. Task.Wait()、Task.Result或await关键字来等待Task对象完成并获取异步操作结果
    1. 案例
#region 等待异步完成

Task<int> task = Task.Run(() =>
                          {
    Console.WriteLine("Task Run");
    return 42;
});
task.Wait();
int result = await task;
Console.WriteLine(result);
int result1 = task.Result;
Console.WriteLine(result1);
#endregion

 

    1. Task的示例代码
//并行编程
Parallel.For(1, 100, i =>
{
    Console.WriteLine($"Task {i} is running");
});

//异步编程
Task.Run(() =>
{
    Console.WriteLine("异步执行任务");
});


//Task.WhenAll示例代码
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
    int index = i;
    tasks.Add(Task.Run(() =>
    {
        Console.WriteLine($"Task {index} is running");
    }));
}
Task.WhenAll(tasks).Wait();

 

 

点击查看代码 ``` ```

标签:异步,Task,Console,实例,WriteLine,Run,基本概念,Wait
From: https://www.cnblogs.com/xiaoxi888/p/17547145.html

相关文章

  • 数字码头系统APP开发实例之会员端功能模块介绍
    数字码头是一款聚合性电商系统,目前开发的数字码头APP1.0版本包含的电商系统、积分系统、看广告系统、卷轴模式系统、签到模块组成。下面我就数字码头系统开发的功能模块,和大家展开探讨,本文主要的内容是主题模块架构和APP闭环商业逻辑的分享。任务一个商业模式系统都要围绕用户激励......
  • JVM(八)对象的实例化内存布局与访问定位
    JVM(八)对象的实例化内存布局与访问定位1对象创建的方式new变形1:Class的newInstance(),即反射Class的newInstance反射的使用较为苛刻,要求只能调用空参的构造器,而且权限必须是public这种方式再jdk9中被标记为过时了Constructor的newInstance(),也属于是反射可以调......
  • vue学习——vue实例与组件
     vc不是通用的称呼,官方的说法是组件实例对象 组件实例的原型对象的原型对象是vue的原型对象 ......
  • 实例分享| anyRTC 部署安徽某市应急实战指挥平台
    在当前的社会环境下,应对各种突发事件和危机管理是各级政府和企事业单位的重要职责,为了提高应急指挥的效率和效果,充分利用现代信息技术为突发事件的应急处理服务是当前的大趋势,整合相关资源,应对各种自然灾害等突发紧急事件,第一时间应对突发紧急事件、实现快速反应、减少损失的目标......
  • 实例分享| anyRTC 部署安徽某市应急实战指挥平台
    在当前的社会环境下,应对各种突发事件和危机管理是各级政府和企事业单位的重要职责,为了提高应急指挥的效率和效果,充分利用现代信息技术为突发事件的应急处理服务是当前的大趋势,整合相关资源,应对各种自然灾害等突发紧急事件,第一时间应对突发紧急事件、实现快速反应、减少损失的目标。......
  • Scrapy框架爬取cnblog实例
    Scrapy框架爬取cnblog下一页简单实例犯了一个错误:直接拿浏览器点出来第二页链接去做拼接,导致一直爬不到下一页实际上应该是:blog.pyimportscrapyfromscrapyimportRequestfrombs4importBeautifulSoupimporttimeclassBlogSpider(scrapy.Spider):name="bl......
  • JAVA static静态变量依赖spring实例化变量,可能导致初始化出错
    在Java中,静态变量是在类加载时初始化的,而实例变量是在对象实例化时初始化的。如果静态变量依赖于Spring实例化的变量,可能会导致初始化出错的问题。这是因为Spring的实例化过程是在运行时进行的,而类加载和静态变量初始化是在编译时进行的。当静态变量依赖于Spring实例化的变量时,如果......
  • mysql8.0多实例部署,同版本多实例和不同版本实例
    一、配置Mysql8.0同版本多实例1、解压移动安装位置2、创建Mysql管理组和用户3、创建多实例用户数据库存储目录修改目录所有者4、修改多实例Mysql主配置文件5、初始化多实例Mysql6、启动服务7、登录多实例Mysql二、配置Mysql不同版本多实例1、安装Mysql5.62、修改mysql5.6主配置文件......
  • Java实现浏览器端大文件分片上传实例
    ​ 上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。一开始以为是session过期或者文件大小受系统限制,导致的错误。查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但还是不行,有时候10分钟就崩了。同事说,可能是客户这里......
  • ionic cordova 打包Rlease版本包出现异常Execution failed for task ':app:mergeRelea
    异常: 解决方法:找到android=》app下的build.gradle文件,如下增加如下配置 运行ioniccordovabuildandroid--release打包语句正常执行 ......