Unity中的c#事件是单线程的吗?

Unity中的c#事件是单线程的吗?,c#,unity3d,C#,Unity3d,Unity的monobhavior中的event是单线程的吗?当我触发一个事件时,如果其中一个侦听器引发异常,将执行catch块。我假设一旦class A触发一个事件,线程将遍历每个订阅服务器。当每个订阅服务器完成时,A类是否在同一线程中继续 公共类事件示例:MonoBehavior { 公共委托void ExampleEventHandler(); 公共静态事件ExampleEventHandler OneDayPassed; public void Start NextTurn() { 试一

Unity的
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不是为多线程设计的。协程类似于新线程(但不是)