线程与任务

本文介绍了线程与进程的区别,详细阐述了开启线程的三种方式:异步委托、Thread类和线程池,并探讨了线程池的特性。此外,还讲解了线程的相关概念,如线程状态、优先级和结束线程的方法。最后,对比了Task与Thread的差异,说明了Task的层次结构和使用方法。
摘要由CSDN通过智能技术生成

线程

线程与进程的区别:
进程:是计算机中已运行的实体。在面向线程设计的系统(当代多数系统)中,进程本身不是基本运行单位,而是线程的容器。

线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。也是独立调度和分派的基本单位。

一个进程可以由多个线程辅助执行。


开启线程的三种方式

1.通过异步委托开启线程
通过Func委托创建一个委托变量来指向我们需要使用的方法,使用BeginInvoke方法开启线程。

//需要委托的方法
static int Test(int i,string str)
        {
            Console.WriteLine("Test"+i+str);
            return 100;
        }

static void Main(string[] args)
        {
            //通过委托开启线程
            Func<int,string,int> a = Test;
            IAsyncResult可以取得当前线程的状态
            IAsyncResult ar = a.BeginInvoke(100,"lymon",null, null); //开启一个新的线程去执行a所引用的方法
            Console.WriteLine("Main");
            //检测线程是否结束
            while (ar.IsCompleted == false)
            {
                Console.Write(".");
                Thread.Sleep(10); //控制子线程的检测频率
            }
            int res = a.EndInvoke(ar); //取得异步线程的返回值
            //可以认为线程是同时执行的(异步执行)
            Console.WriteLine(res);

结束线程的三种方法

  • 通过while循环检测
    使用isComplete方法用死循环判断线程是否结束,如果结束的话,使用EndInvoke方法取得线程的返回值
while (ar.IsCompleted == false)
            {
                Console.Write(".");
                Thread.Sleep(10); //控制子线程的检测频率
            }
            int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值