欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 16:05:40
前言 其实task跟线程池threadpool的功能类似,不过写起来更为简单,直观。代码更简洁了,使用task来进行操作。可以跟线程一样可以轻松的对执行的方法进行控制。...

前言

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

总结

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

上一篇:

下一篇: