• C# Thread 和 Task


    前言:

      如果你的任务是射出一万支箭,如果只有你一个人射箭,那你就只能一箭一箭慢慢地射个老半天。如果你找一万个人,来个万箭齐发,岂不是一下子就完事了。Thread就是能让你万箭齐发的好办法。

      如果你的任务还需要汇报射箭的成绩的话,线程就不行了,得用任务。async/await可以帮你还是来个万箭齐发,但你射完不能走,得等那一万个射手给你回报成绩。

      如果你本来就只要射一箭就好,那么,async/await能让你在等待报靶的时间里面干点别的小事情,譬如赚上1个亿。如果你射完箭除了等待成绩之外也没别的事情可做,那么,async/await就白用了,和同步没有任何区别。

    一:线程

      创建线程有两种方式  

         1.不带参数创建线程   

    var thread1 = new Thread(ThreadTest1)
    public static void ThreadTest1()
    {
            // 业务代码
    }
    thread1.start();

             2.带参数创建线程

    var thread2 = new Thread(ThreadTest2);
    public static void ThreadTest2(object obj)
    {
            //业务代码
    }
    thread2.Start(obj);

     总结:均没有返回值。主线程结束子线程未必结束,子线程出现问题未必能发现,并处于假死状态。

    二:任务

      创建任务有三种方式

      1.通过构造函数创建(此方法需要手动开始任务)

    var task1 = new Task(() => { });
    var task2 = new Task<int>(()=> 
    {
        return 0;
    });
    task1.Start();
    task2.Start();

      2.使用任务工厂(任务需要长时间运行)

    var task1 = Task.Factory.StartNew(() => { });
    var task2 = Task.Factory.StartNew(() =>
    {
        return 0;
    });

       3.Task.Run创建

    var task1 = Task.Run(() => { });
    var task2 = Task.Run(() =>
    {
        return 0;
    });

    总结:任务的运行不会阻塞主线程。主线程结束后,任务一定也会结束。任务和主线程关联大,任务出现问题时主线程也会崩溃告知人。所以别用Thread。

  • 相关阅读:
    运行期优化
    虚拟机字节码执行引擎
    虚拟机类加载机制
    类文件结构
    垃圾收集机制
    浅析Spring MVC工作机制
    TomCat系统架构
    docker安装mongo初体验
    微服务笔记--概念
    使用maven构建多模块项目_记录
  • 原文地址:https://www.cnblogs.com/HansZimmer/p/13491455.html
Copyright © 2020-2023  润新知