C#事件系统在单线程程序中是否确定性?

6
这个问题是重复的:事件处理程序执行顺序 在单线程程序中,C#事件系统是否是确定性的?也就是说,如果我以这种顺序触发事件A、B和C,它们每次都会按照相同的顺序处理吗?
我想编写一个与事件密切相关的游戏逻辑,因此确保事件按照调用顺序精确处理非常关键。那么我可以使用现有的事件系统吗?像Reactive Extensions这样的库是否满足要求,还是我必须实现自己的观察者系统?

2
@Lloyd,这基本上是同一个问题,但已经超过3年了,而且被接受的答案说它将来可能会改变 - 它有改变吗? - Hackworth
2
@Hackworth 这是同一个问题吗?那个问题有一个事件和多个订阅者。你的问题提到了多个事件。到底是哪一个呢?一些示例代码可以帮助澄清。 - Mike Zboray
@mikez 这只是一个假设性的问题,目前还没有编写任何代码。如果确实会产生影响,请假设并回答最坏的情况。 - Hackworth
“非常重要的是以被调用的顺序精确处理事件”-- 事件不是“被调用”,而是“订阅”和“触发”。当你写“被调用”时,不清楚你指的是哪一个,但后者似乎更有可能。如果是这种情况,那么你的问题被关闭的帖子实际上并不是重复的,并且与你实际的问题几乎没有关系。如果您能澄清您实际意思将会很有帮助;在之前的询问中您从未这样做过,我希望了解此问题是否值得重新打开。 - Peter Duniho
1个回答

3
如果我按照顺序依次触发事件A、B和C,对于单线程程序来说,它们每次都会按照相同的顺序被处理吗?
是的。触发事件只是调用方法的一种复杂方式。因此,这等效于:
在单线程上,如果我按照顺序调用方法A()、B()和C(),它们会按照这个顺序执行,当然会。

你说得很有道理。在单线程上,事件通常是用户触发的函数调用。当用户这样做时,调用此函数。它们将按照被调用的顺序执行。添加多个线程会使事情变得更有趣......事件将始终按照调用它们的线程的顺序执行。如果两个不同的线程触发了相同的事件,则它们将同时执行,一个在每个线程上,除非有锁定/阻塞代码以允许一次只有1个实例。 - Nevyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接