Unity中的c#事件是单线程的吗?
Unity的Unity中的c#事件是单线程的吗?,c#,unity3d,C#,Unity3d,Unity的monobhavior中的event是单线程的吗?当我触发一个事件时,如果其中一个侦听器引发异常,将执行catch块。我假设一旦class A触发一个事件,线程将遍历每个订阅服务器。当每个订阅服务器完成时,A类是否在同一线程中继续 公共类事件示例:MonoBehavior { 公共委托void ExampleEventHandler(); 公共静态事件ExampleEventHandler OneDayPassed; public void Start NextTurn() { 试一
monobhavior
中的event
是单线程的吗?当我触发一个事件时,如果其中一个侦听器引发异常,将执行catch块。我假设一旦class A
触发一个事件,线程将遍历每个订阅服务器。当每个订阅服务器完成时,A类
是否在同一线程中继续
公共类事件示例:MonoBehavior
{
公共委托void ExampleEventHandler();
公共静态事件ExampleEventHandler OneDayPassed;
public void Start NextTurn()
{
试一试{
如果(OneDayPassed!=null)
{
一天过去了();
}
}
捕获(例外e)
{
//我们会在这里发现错误
}
}
}
公共类实体观察者:MonoBehavior
{
void Start()
{
EventExample.OneDayPassed+=this.PrepareNextDay;
}
公共作废准备第X天()
{
int test=int.parse(“错误”);
}
}
Unity的事件API是单线程的。而且,它的设计不支持多线程(非线程安全)
当然,如果需要,您可以显式地委托多线程的一些工作,但不要尝试用这些任务调用Unity API
您可以在此处获得更多信息:
如果需要依赖某些执行顺序,可以参考
单行为
主要是单线程的,但一些回调函数不是。大多数Unity API回调函数将在主线程上生成
这些是不会在主线程上调用的功能,这意味着您不能在这些函数中调用/使用Unity API:
Application.RegisterLogCallbackThreaded
- 事件
回调函数monobhavior
至于您自己的定制活动,如:
public delegate void ExampleEventHandler();
public static event ExampleEventHandler OneDayPassed;
在从中调用该事件的线程上调用该事件。如果从主/单行为线程调用它,回调将在主线程上发生。如果您创建了一个新的线程
,并从那里调用它,或者使用上面列出的3个函数中的任何一个,则希望在主线程
之外的另一个线程
上调用它
如果您需要从另一个
线程
而不是主线程
使用Unity的API,那么请参阅文章。是的,别担心,您的事件是按顺序处理的,您不会有并发问题(当然,除非您明确使用多线程)哦,顺便说一句,Unity API不是为多线程设计的。协程类似于新线程(但不是)