• 进程:一个程序运行时,占用全部计算资源的总和
  • 线程:
    • 程序执行流的最小单位,任何操作都是由线程完成。
    • 线程是依托于进程存在的,一个进程可以包含多个线程
    • 线程也可以有自己的计算资源
  • 多线程:多个执行流同时运行
  • 同步:完成计算之后,进入下一行步骤
  • 异步:不会等待方法的完成,直接进入下一行步骤

    Thread

    1. new Thread(() => Console.Write(1)).Start();
    2. new Thread(Print).Start();
    3. void Print(){
    4. Console.Write(1);
    5. }

    线程优先级

    1. enum ThreadPriority{Loweast, BelowNormal, Normal, AboveNormal, Highest}

    Async

  • 同步方法慢,只有一个线程干活,异步多线程方法快,因为有多个线程并发运算

  • 资源换时间
  • 有管理成本
  • 并不是越多越好
  • 启动无序
  • 结束无序
  • 执行时间不确定

    委托的异步调

BeginInvoke

BeginInvoke(string obj, AsyncCallback callback, object @object)

  1. Action<string> action = this.DoSomethingLong;
  2. for (int i = 0; i < 5; i++)
  3. {
  4. string name = string.Format($"{i}");
  5. action.BeginInvoke(name, null, null);
  6. }

EndInvoke

EndInvoke(IAsyncResult asyncResult)
可以等待,并且带返回值

  • AsyncCallback,可以指定线程完成之后执行的委托
  • IAsyncResult,线程执行后的结果
    • 结果会传给AsyncCallback

前台和后台线程

  • 默认情况下,手动创建的线程是前台线程
  • 只要有前台线程再运行,那么应用程序就会一直处于活动状态
    • 后台线程却不行
    • 一旦所有的前台线程停止,那么应用程序就停止了
    • 然后后台线程也会突然终止
  • IsBackground判断是否后台线程