线程与协程
协程的作用:
- 延迟(等待)一段时间执行代码;
- 等待某个操作完成后执行后面的代码.
总结起来就是一句话:控制代码在特定的时机执行。
协程不是线程.也不是异步执行的
Unity中协程的执行
A coroutine is a function that is executed partially and, presuming suitable conditions are met, will be resumed at some point in the future until its work is done.
即协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。
Unity在每一帧(Frame)都会去处理对象上的协程。Unity主要是在Update后去处理协程.
检查协程的条件是否满足.
IEnumerator & Coroutine
- 协程其实就是一个IEnumerator(迭代器),IEnumerator 接口有两个方法 Current 和 MoveNext() .
- TaskManager 利用者两个方法对协程进行了管理. 只有当MoveNext()返回 true时才可以访问 Current,否则会报错。
- 迭代器方法运行到 yield return 语句时,会返回一个expression表达式并保留当前在代码中的位置。 当下次调用迭代器函数时执行从该位置重新启动。
- Unity在每帧做的工作就是:调用 协程(迭代器)MoveNext() 方法,如果返回 true ,就从当前位置继续往下执行。