简介:充分使用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. MySQL事务与锁

    MySQL事务与锁 锁的基本概念 锁是计算机协调多个进程或线程并发访问某一资源的机制. 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISA ...

  2. Apache常用配置

    Apache配置文件:conf/httpd.conf.(注意:表示路径时使用‘/’而不使用‘\’,注释使用‘#’) 1. ServerRoot:服务器根目录,也就是Apache的安装目录,其他的目录配 ...

  3. LeetCode 190. Reverse Bits (反转位)

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  4. centos 安装giblab

    本文章转载自:http://www.cnblogs.com/fanjingfeng/p/6665597.html 一, 服务器快速搭建gitlab方法 可以参考gitlab中文社区 的教程 cento ...

  5. 借助csv用PHP生成excel文件

    当你将xml文件改为csv后缀会发现原先的表格结构都变成用逗号隔开的一行一行数据,就像这样 编号,姓名,年龄 001,王宇,28 002,刘三,20 由此看来,如果能将PHP数据输出为这样的格式,然后 ...

  6. D - Zhenya moves from the dormitory URAL - 2015

    After moving from his parents’ place Zhenya has been living in the University dormitory for a month. ...

  7. Einbahnstrasse

    Einbahnstrasse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. Entropy

    Entropy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. CIFAR-10 dataset 的下载与使用

    基本信息 CIFAR-10 是一个包含60000张图片的数据集.其中每张照片为32*32的彩色照片,每个像素点包括RGB三个数值,数值范围 0 ~ 255. 所有照片分属10个不同的类别,分别是 'a ...

  10. iOS 中的 Delayed Transition

    Android 的动画体系中,存在一类由 TransitionManager. beginDelayedTransition 管理的动画.这个方法,很特殊.执行此方法后,其后续的 UI 变化,不会立即 ...