调用在协程中声明的 System.Action 是否安全?
IEnumerator MyCoroutine(){
bool myBool = true;
System.Action action = ()=>{myBool=false;}
StartCoroutine (MyOtherCoroutine(action));//just launch and forget about it
}
IEnumerator MyOtherCoroutine(System.Action dangerous_callback){
yield return null;
yield return null;//skip several frames
yield return null;
dangerous_callback.Invoke();//will cause problems? The owner coroutine (and it's myBool) is no longer on stack
}
我担心的是myBool在第一个协程中分配的。MyCoroutine不等到MyOtherCoroutine完成。我可以看到 System.Action 不会被收集,因为它确实仍然被 引用MyOtherCoroutine,但是MyCoroutine(Action 修改的布尔变量)应该已经被释放了?
慕少森
炎炎设计
相关分类