C#利用Task实现任务超时多任务一起执行的方法

所属分类: 软件编程 / C#教程 阅读数: 40
收藏 0 赞 0 分享

前言

其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观。代码更简洁了,使用Task来进行操作。可以跟线程一样可以轻松的对执行的方法进行控制。

创建Task有两种方式,一种是使用构造函数创建,另一种是使用 Task.Factory.StartNew 进行创建。

如下代码所示

1.使用构造函数创建Task

Task t1 = new Task(MyMethod);

2.使用Task.Factory.StartNew 进行创建Task

Task t1 = Task.Factory.StartNew(MyMethod);

其实这两种方式都是一样的,Task.Factory 是对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);   
  }

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

C#中Datetimepicker出现问题的解决方法

这篇文章主要给大家介绍了关于C#中Datetimepicker出现问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C# SQLite数据库入门使用说明

这篇文章主要给大家介绍了关于C#中SQLite数据库入门使用的相关资料,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C#实现批量下载图片到本地示例代码

这篇文章主要给大家介绍了关于C#如何实现批量下载图片到本地的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

如何获取C#中方法的执行时间以及其代码注入详解

这篇文章主要给大家介绍了关于如何获取C#中方法的执行时间以及其代码注入的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
收藏 0 赞 0 分享

C#中通过LRU实现通用高效的超时连接探测

这篇文章主要介绍了c#中通过LRU实现通用高效的超时连接探测,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
收藏 0 赞 0 分享

如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C#程序启动项的设置方法

这篇文章主要为大家详细介绍了C#程序启动项的设置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

c#爬虫爬取京东的商品信息

这篇文章主要给大家介绍了关于利用c#爬虫爬取京东商品信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们随着小编来一起学习学习吧
收藏 0 赞 0 分享

C#随机数生成字母金字塔

这篇文章主要为大家详细介绍了C#随机数生成字母金字塔,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

WPF实现窗体中的悬浮按钮

这篇文章主要为大家详细介绍了WPF实现窗体中的悬浮按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多