简介:充分使用Task的异步功能
代码实现:
1.实现了任务超时 退出任务

2.多个任务一起执行

/// <summary>
        ///做事 需要 ms秒 才能完成
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        static async Task<string> Doing(int time, string name = "我")
        {
            Console.WriteLine(name+"来了");
            await Task.Delay(TimeSpan.FromMilliseconds(time));
            return string.Format("这活{1}干了:{0}ms ", time,name);
        }
        /// <summary>
        /// 设定超时任务  如果超时返回
        /// </summary>
        /// <param name="needTimeOut"></param>
        /// <returns></returns>
        static async Task<string> TimeOut(bool needTimeOut)
        {
            Console.WriteLine(needTimeOut);
            var t=new Stopwatch();
            t.Start();
            var timeOutTask = Task.Delay(150);//1.设定一个超时的任务
            var doing = Doing(needTimeOut ? 100 : 300);//2. 真正需要执行的任务
            var task = await Task.WhenAny(doing,timeOutTask);//返回任何一个完成的任务
            if (task == timeOutTask)//如果超时任务先完成了  就返回  很可惜 他没有完成!
            {
                return "很可惜 他没有完成!";
            }
            t.Stop();
            Console.WriteLine("耗时:"+t.Elapsed.TotalMilliseconds);
            return await doing;
        }

        /// <summary>
        /// 多任务一起执行
        /// </summary>
        /// <returns></returns>
        static async Task  Tasks()
        {
            var t = new Stopwatch();
            t.Start();
            var list=new List<string>();
            var t1 = Doing(1000, "1000");//1.定义任务
            var t2 = Doing(1500, "1500");
            var t3 = Doing(1200, "1200");
            var tasks = new[] {t1, t2, t3};//2.任务组

            var process = tasks.Select(async tt =>//3.等待任务结束  并保存值
            {
                var result = await tt;
                list.Add(result);
            });
            await Task.WhenAll(process);//4.等待处理完全
            foreach (var i in list)//5.查看结果
            {
                Console.WriteLine(i);
            }
            t.Stop();
            Console.WriteLine("耗时:" + t.Elapsed.TotalMilliseconds);
      
           
        }

C# 使用Task实现任务超时,多任务一起执行的更多相关文章

  1. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  2. C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

    我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...

  3. C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

    /// <summary> /// 控制函数执行时间,超时返回null不继续执行 /// 调用方法 /// FuncTimeout.EventNeedRun action = delega ...

  4. 多任务3(协程)--yield完成多任务交替执行

    协程是并发,单线程,一次执行一个 来回切换 代码: import time def task_1(): while True: print("-----1-----") time. ...

  5. .net 关于Task.Run 和 Async await的执行顺序

    一直捋不清楚用Task.Run异步的执行关系,网上找的些说明写得也有点复杂,所以自己做实验测一下. 直接上代码 这个是加await private static void TestFun() { Co ...

  6. linux screen 多任务后台执行

    1.安装工具:yum install -y screen 2.进入新screen界面:screen 3.回到原命令行:先按CTRL+a,然后再按d 4.查看现有的screen回话:screen -ls ...

  7. SpringBoot2.x整合quartz实现多任务定时执行

    一.pom文件中导入相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  8. C# 多任务之 Task

    Task 是什么 ? Task 是一个类, 它表示一个操作不返回一个值,通常以异步方式执行. Task 对象是一个的中心思想 基于任务的异步模式 首次引入.NET Framework 4 中. 继承层 ...

  9. C# 异步编程3 TPL Task 异步程序开发

    .Net在Framework4.0中增加了任务并行库,对开发人员来说利用多核多线程CPU环境变得更加简单,TPL正符合我们本系列的技术需求.因TPL涉及内容较多,且本系列文章为异步程序开发,所以本文并 ...

随机推荐

  1. Hbuilder中添加Babel自动编译

    Hbuilder是一个不错的H5开发IDE. Babel是EMCAScript最新标准的编译器,很多ES的最新特性都可以在Babel中尝试. 如果可以有办法在Hbuilder中直接使用ES6,并通过B ...

  2. 开源API集成测试工具 Hitchhiker v0.3更新 - 自动同步

    Hitchhiker 是一款开源的 Restful Api 集成测试工具,支持Schedule, 数据对比,压力测试,可以轻松部署到本地,和你的team成员一起管理Api. 详细介绍请看: http: ...

  3. java中matches的用法

    在java中,时常会用到查看一个字符串是否是数字,这时就可以用到matches()函数. 具体实例如下: public boolean string_matches(String amatch) { ...

  4. bug:翻页

    本章主要分享下,个人测试经历中遇见过的翻页bug 一.列表翻页 1.bug1:去请求翻页page=0,从0页开始算.一般来说page=0 和 page=1的数据是一模一样,所以翻第2页时会发现和第1页 ...

  5. openCV中直方图均衡化算法的理解

    直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...

  6. Problem K

    Problem Description The local toy store sells small fingerpainting kits with between three and twelv ...

  7. FTP&samba 服务简单部署

    第1章 FTP服务部署 在Linux下,我们应用最广泛的FTP服务程序是 vsftpd ( TCP端口:而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与 ...

  8. Remove Untagged Images From Docker

    I've been playing around a lot with docker. It's awesome, and it creates a whole new world of possib ...

  9. CSS系列------选择器和选择器的优先级

    1.1.基本选择器 通配符选择器(*)      通配符选择器的使用方法如下 *{margin:0px; padding:0px;} //*代表所有的 ID选择器(#) ID选择器的使用方式如下: * ...

  10. 利用C#来做ASP.NET的登陆页面

    一.新建一个数据库 新建一个access数据user.mdb. 新建一个user表,添加:UserId(文本类型)及Password(文本类型)两个字段.二.新建一个default.aspx文件. 在 ...