gpt4 book ai didi

c# - Unity3D 协程和 lambda 回调,安全

转载 作者:行者123 更新时间:2023-12-04 01:53:24 25 4
gpt4 key购买 nike

调用在协程中声明的 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 修改的 bool 变量)应该已经被释放了吗?

最佳答案

But this seems like a possible memory leak, that might be impossible to catch later on? Just asking if it's fine to use it.



没有内存泄漏。这样做完全没有问题,如果您需要在协程函数中进行回调,那就应该这样做。请记住,这是 C# 并且在 C# 中创建内存泄漏比在 C++ 中更难,除非您滥用了一些 Unity 的 API,这些 API 可以在 native (C++)端创建内存泄漏,但这里的情况并非如此。

虽然,您应该检查 Actionnull在以其他方式调用它之前,请期待您的代码中存在一些问题。
if (dangerous_callback != null)
dangerous_callback.Invoke();

关于c# - Unity3D 协程和 lambda 回调,安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51933666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com