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