C#协程
furrain 5/15/2022 UnityCSharp
# C#协程
听说C++里面也新出了协程的特性,但是平时还是 用C++11和C++14开发,这个也没有了解过
直接进行一个C#协程的了解
# 简介
给我的感觉是协程是一种特殊的多线程,使用起来比多线程简单,没那么麻烦,但是有多线程的特性,不会阻塞主线程,异步执行函数。
它的作用是在主程序上开启一段协同程序,看起来有点像多线程,但其实它还是运行在主线程之上的。
# 特性
- 它有一个特定的返回类型叫做IEnumerator
- 因为特殊的返回类型所以必须要有返回,但返回不是简单的return而是yield return后面可以是null,可以是WaitForSeconds(等待多少秒),WaitForFixedUpdate(在FixedUpdate每一帧之后),还可以是另外一个协程……
- .协程的开启需要用StartCoroutine(里面可以写方法名,也可以直接调用方法),可以用Stop(All)Coroutine来停止
- 协程不会因为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
2
3
4
5
6
7
8
9
10
11
12
13
14
打印了“协同”后过了两秒才打印“程序”,而且即使后面是yield return null 它也继续执行了。
协程可以用来作为优化的一种手段,比如游戏中一些需要不断更新但又不需要像Update这么频繁的时候。