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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM