简介:充分使用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); }
|
请发表评论