简介:充分使用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);
      
           
        }

最新文章

  1. iPhone被盗后怎么?这篇文章只办针对iOS7后的系统
  2. 基于Css反射形自触发事件,优化你的延时事件
  3. P2672 推销员
  4. java Semaphore
  5. Eclipse中Build Workspace 优化
  6. java数据结构和算法------顺序查找
  7. WEB- 冻结TABLE的头和列
  8. 【转】lua random()
  9. The Use of Aliases in ElasticSearch
  10. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (二) 图片裁剪
  11. 前端复制功能的若干 -- document.execCommand()
  12. 浅析如何在Nancy中使用Swagger生成API文档
  13. maven---settings.xml配置
  14. Python 爬虫——抖音App视频抓包
  15. js数组冒泡
  16. windows XP系统搜索无线网络时提示“windows无法配置此无线连接”,如何处理?
  17. Web前端学习笔记之前端跨域知识总结
  18. WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件
  19. Python并发编程-队列
  20. SpaceVim 语言模块 lua

热门文章

  1. Python2.7 中文字符编码 &amp; Pycharm utf-8设置、Unicode与utf-8的区别
  2. 关于EsayUI中datagrid重复提交后台查询数据的问题
  3. jQuery源码的一个坑
  4. mvc4 实现自己的权限验证 仿Authorize与AllowAnonymous原理
  5. code force 424 A - Office Keys
  6. 定制rpm包---Yum环境搭建
  7. js 函数声明和函数表达式
  8. HTML知识速递
  9. openstack学习心得:keystone 架构、概念、访问流程
  10. Appscan 配置中登录管理的问题