虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > C#利用Task实现任务超时多任务一起执行的方法

C#利用Task实现任务超时多任务一起执行的方法
类别:C#编程   作者:码皇   来源:互联网   点击:

这篇文章主要给大家介绍了关于C 利用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);
    }

总结

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

您可能感兴趣的文章:

  • c#异步task示例分享(异步操作)
  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿
  • windows下C#定时管理器框架Task.MainForm详解
相关热词搜索: c task 多任务 task 多任务 c task多线程