C# C事件执行顺序(Unity3D游戏)
我正在Unity C中开发一个游戏,我依靠C事件来更新游戏状态,即:检查游戏是否在给定动作后完成 考虑以下场景:C# C事件执行顺序(Unity3D游戏),c#,ios,events,unity3d,thread-safety,C#,Ios,Events,Unity3d,Thread Safety,我正在Unity C中开发一个游戏,我依靠C事件来更新游戏状态,即:检查游戏是否在给定动作后完成 考虑以下场景: // model class class A { // Event definition public event EventHandler<EventArgs> LetterSet; protected virtual void OnLetterSet (EventArgs e) { var handler = Lette
// model class
class A
{
// Event definition
public event EventHandler<EventArgs> LetterSet;
protected virtual void OnLetterSet (EventArgs e)
{
var handler = LetterSet;
if (handler != null)
handler (this, e);
}
// Method (setter) that triggers the event.
char _letter;
public char Letter {
get { return _letter }
set {
_letter = value;
OnLetterSet (EventArgs.Empty);
}
}
}
// controller class
class B
{
B ()
{
// instance of the model class
a = new A();
a.LetterSet += HandleLetterSet;
}
// Method that handles external (UI) events and forward them to the model class.
public void SetLetter (char letter)
{
Debug.Log ("A");
a.Letter = letter;
Debug.Log ("C");
}
void HandleCellLetterSet (object sender, EventArgs e)
{
// check whether the constraints were met and the game is completed...
Debug.Log ("B");
}
}
是否保证输出始终为B C?或者,事件订阅服务器的执行HandleCellLetterSet是否可以延迟到下一帧,从而产生C B
编辑:B是A.LetterSet的唯一订户。问题不在于多个订阅者之间的执行顺序。是的,本文中所示的同步事件处理程序保证在以某种顺序顺序执行之后,即在执行返回到触发事件的代码之前完成 所以你的代码保证打印A,B,C
更多链接:,使事件异步-,等待异步事件-。从一次调用到下一次调用,您不能依赖以任何特定顺序执行的处理程序。这是非常危险的,并且会导致代码不可理解。看,如果你真的需要的话。谢谢@Smartis的推荐。为了避免混淆,我正在编辑这个问题,以明确代码只包含一个事件订阅者。问题不在于多个订阅者之间的执行顺序,而在于触发事件的行为和在订阅者中执行代码之间的执行顺序。