zoukankan      html  css  js  c++  java
  • C# 使用Task实现任务超时,多任务一起执行

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

  • 相关阅读:
    恐怖的Hibernate和JavaFX Table CallBack!
    Java 设计模式 – Observer 观察者模式
    Jenkins 配置 SpringBoot 自动构建部署
    Android 虹软人脸识别SDK-人脸对比
    Okhttp3 网络请求框架与 Gson
    商贸型企业 Java 收货 + 入库 + 生成付款单
    webupload项目中使用
    JavaFX程序初次运行创建数据库并执行建表SQL
    Java实现ArrayList
    Factory Method模式
  • 原文地址:https://www.cnblogs.com/change4now/p/8012350.html
Copyright © 2011-2022 走看看