C# 使用Task實現任務超時,多任務一塊兒執行

簡介:充分使用Task的異步功能
代碼實現:
1.實現了任務超時 退出任務異步

2.多個任務一塊兒執行async


        /// <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);
      
           
        } pwa

相關文章
相關標籤/搜索