• CLR via C# 读书笔记 35 .net framework4.0 新增类 Task(一种很好的异步模型)


    Task 是在.net framework 4.0中提供的新功能

    主要用于异步操作的控制

    在很多时候他比Thread和ThreadPool提供更为强大的功能,并且更方便使用

    1.demo

    以下代码是使用Task的一个demo

    代码
    // Create a Task (it does not start running now)
    Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000000000);
    // You can start the task sometime later
    t.Start();
    // Optionally, you can explicitly wait for the task to complete
    t.Wait(); // FYI: Overloads exist accepting timeout/CancellationToken
    // You can get the result (the Result property internally calls Wait)
    Console.WriteLine("The Sum is: " + t.Result); // An Int32 value

    Sum是一个声明好的外部函数, 当然我们也可以使用lambda来替代它

    这几句代码声明了一个Task 并且调用Start方法启动他,然后使用Wait方法等待这个异步任务的完成

    2.Task的优势

      1.Task可以很方便的控制是使用线程池还是使用线程来执行(也许以后还会增加更多的执行模型)

      2.Task<T> 允许输入输出强类型的参数

      3.使用Task可以很方便的控制 例如:等待,取消 Task (个人觉得这个是最大的优势)

      4.可以很方便的处理到Task中发生的未处理的异常

      5.Task.ContinueWith方法可以很方便的安排Task之间的执行顺序(例如通过参数TaskCountinuationOptions参数来控制 在某任务A执行完成,取消或者其他特定情况下,任务B立刻启动接着执行,以下代码显示了等待不同情况的执行顺序) 

    代码
    Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 100000000);
    t.Start();

    t.ContinueWith(task
    => Console.WriteLine("The sum is: " + task.Result),
    TaskContinuationOptions.OnlyOnRanToCompletion);
    //only completion
    t.ContinueWith(task => Console.WriteLine("Sum threw: " + task.Exception),
    TaskContinuationOptions.OnlyOnFaulted);
    //only exception
    t.ContinueWith(task => Console.WriteLine("Sum was canceled"),
    TaskContinuationOptions.OnlyOnCanceled);
    //only cencel

       6.可以通过Task.Status 很方便的查询到一个Task当前的状态(包括 新建,等待,运行,异常等)

      7.可以自定义TaskScheduler,来控制Task的执行, 目前已经有很多成熟的Scheduler提供在网络上(例如 IOTaskScheduler OrderedTaskScheduler 等..)

        

  • 相关阅读:
    Freemarker-2.3.22 Demo
    Freemarker-2.3.22 Demo
    Freemarker-2.3.22 Demo
    Freemarker-2.3.22 Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/1886534.html
Copyright © 2020-2023  润新知