zoukankan      html  css  js  c++  java
  • .Net并行库介绍——Task(2)

    TaskManagerTaskManagerPolicy

    这两个类主要是对Task的策略进行管理,主要管理的属性包括:最少处理Task的处理器个数、理想处理Task的处理器个数、理想的处理线程数及优先级几个属性。

    在Task中使用TaskManager非常简单,只要在创建Task时将manager传入构造函数中即可。如下例所示:

        var manager = new TaskManager(new TaskManagerPolicy(1, 1,1));
        var t1 = Task.Create(x => Thread.Sleep(2000), manager);
        var t2 = Task.Create(x => Thread.Sleep(2000), manager);

        var start = DateTime.Now;
        Task.WaitAll(t1, t2);
        var end = DateTime.Now;

        Console.WriteLine(end-start);

    在这里我将处理线程个数设置了为1,这样的话,只有一个线程来处理Task,执行这两个Task总共花费的时间为4秒;而在使用默认manager时候,这两个任务是并发执行的,只需要两秒即可执行完成。

       

    异常处理

    当Task在执行过程中发生异常时,该异常会在Wait或WaitAll函数中重新throw。可以通过Task的Exception属性来获取发生的异常。

    var t1 = Task.Create(x => { throw new Exception("t1 error occor"); });
        var t2 = Task.Create(x => { throw new Exception("t2 error occor"); });

        try
        {
            Task.WaitAll(t1, t2);
        }
        catch(Exception)
        {
            Console.WriteLine(t1.Exception.InnerException.Message);
            Console.WriteLine(t2.Exception.InnerException.Message);
        }

     

    另外,顺带简单的介绍一下Future类,这个类的功能和用法和Task非常相似,完全可以看做一个带返回值的Task。示例如下:

        var f1 = Future.Create(() => 3);

        f1.Wait();
        Console.WriteLine(f1.Value);

  • 相关阅读:
    Asp.net(C#) windows 服务{用于实现计划任务,事件监控等}
    DLL反编译,DLL反编译成C#代码, 有些不良同学会用到哦!
    各种分享按钮代码
    ASP.NET 计划任务(不使用外接程序,.net内部机制实现)
    工厂模式{C#描述}
    FI:Customize FBL3N Layout
    简单工厂 工厂模式 抽象工厂C#
    URL, URI 和 URN 之间的区别转
    resize属性,使textarea在ff(火狐)中禁止拉伸
    UML类图几种关系的总结转
  • 原文地址:https://www.cnblogs.com/TianFang/p/1367456.html
Copyright © 2011-2022 走看看