您的位置:首页 > 其它

.Net并行库介绍——Task(2)

2009-01-03 15:04 274 查看
TaskManager和TaskManagerPolicy


这两个类主要是对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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: