C#协程

5/15/2022 UnityCSharp

# C#协程

听说C++里面也新出了协程的特性,但是平时还是 用C++11和C++14开发,这个也没有了解过

直接进行一个C#协程的了解

# 简介

给我的感觉是协程是一种特殊的多线程,使用起来比多线程简单,没那么麻烦,但是有多线程的特性,不会阻塞主线程,异步执行函数。

它的作用是在主程序上开启一段协同程序,看起来有点像多线程,但其实它还是运行在主线程之上的。

# 特性

  1. 它有一个特定的返回类型叫做IEnumerator
  2. 因为特殊的返回类型所以必须要有返回,但返回不是简单的return而是yield return后面可以是null,可以是WaitForSeconds(等待多少秒),WaitForFixedUpdate(在FixedUpdate每一帧之后),还可以是另外一个协程……
  3. .协程的开启需要用StartCoroutine(里面可以写方法名,也可以直接调用方法),可以用Stop(All)Coroutine来停止
  4. 协程不会因为yield return而中断执行,或者执行到一些没有用的代码就返回,它会继续执行到最后

# 示例


    void Start()
    {
        StartCoroutine(Test01());
        //StartCoroutine("Test01");
    }
 
    IEnumerator Test01(){
        Debug.Log("协同");
        yield return new WaitForSeconds(2f);
        Debug.Log("程序");
        yield return null;
        Debug.Log("继续运行");
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14

img

打印了“协同”后过了两秒才打印“程序”,而且即使后面是yield return null 它也继续执行了。

协程可以用来作为优化的一种手段,比如游戏中一些需要不断更新但又不需要像Update这么频繁的时候。