zoukankan      html  css  js  c++  java
  • 使用任务执行基本的操作

    本节将描述如何从任务中获取结果值。我们将通过几个场景来了解在线程池中和主线程中运行任务的不同之处。

    class Program
    {
        static void Main(string[] args)
        {
            TaskMethod("Main Thread Task");//该方法是被同步执行的。很显然它不是线程池中的线程

    //该任务会被放置在线程池中,并且主线程会等待,直到任务返回前一直处于阻塞状态 Task
    <int> task = CreateTask("Task 1"); task.Start();

         int result = task.Result;//主线程会等待,直到任务返回前一直处于阻塞状态
            Console.WriteLine("Result is: {0}", result);
     
    //该任务会运行在主线程中,输出与第一个例子中直接同步调用TaskMethod的输出完全一样 task
    = CreateTask("Task 2");//Task2和Task1类似,只不过不会放到线程池中,因为下面的语句使用了RunSynchronously task.RunSynchronously();//这是个非常好的优化,可以避免使用线程池来执行非常短暂的操作 result = task.Result; Console.WriteLine("Result is: {0}", result);
    //Task3不会阻塞主线程,只是在该任务完成前循环打印出任务状态。结果展示了多种任务状态,分别是Creatd, Running和 RanToCompletion task
    = CreateTask("Task 3"); Console.WriteLine(task.Status); task.Start(); while (!task.IsCompleted)//展示多种任务状态,不会阻塞主线程 { Console.WriteLine(task.Status); Thread.Sleep(TimeSpan.FromSeconds(0.5)); } Console.WriteLine(task.Status); result = task.Result; Console.WriteLine("Result is: {0}", result); Console.ReadKey(); } static Task<int> CreateTask(string name) { return new Task<int>(() => TaskMethod(name)); } static int TaskMethod(string name) { Console.WriteLine("Task {0} is running on a thread id {1}. Is thread pool thread: {2}", name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); Thread.Sleep(TimeSpan.FromSeconds(2)); return 42; } }

      首先直接运行TaskMethod方法,这里并没有把它封装到一个任务中。结果根据它提供给我们的主线程的信息可以得知该方法是被同步执行的。很显然它不是线程池中的线程。
      然后我们运行了Task 1,使用Start方法启动该任务并等待结果。该任务会被放置在线程池中,并且主线程会等待,直到任务返回前一直处于阻塞状态。
      Task 2和Task 1类似,除了Task 2是通过RunSynchronously()方法运行的。该任务会运行在主线程中,该任务的输出与第一个例子中直接同步调用TaskMethod的输出完全一样。这是个非常好的优化,可以避免使用线程池来执行非常短暂的操作。
      我们用以运行Task 1相同的方式来运行Task 3,但这次没有阻塞主线程,只是在该任务完成前循环打印出任务状态。结果展示了多种任务状态,分别是Creatd, Running和 RanToCompletion。

  • 相关阅读:
    CSU software 新手练习1 解题报告
    HDU 4067 Random Maze
    HDU 1853 Cyclic Tour
    Notepad++搭配MinGW编译运行C,C++程序
    ACM POJ3299-Humidex
    开始正常的做题了=。=
    写在杭电热身赛2之后
    大二了~
    Vim 学习笔记之cvim hot key
    The 10th Zhejiang Provincial Collegiate Programming Contest
  • 原文地址:https://www.cnblogs.com/gougou1981/p/12602924.html
Copyright © 2011-2022 走看看