2013-01-09 8 views
7

Powiel możliwe:
Order of event handler executionCzy system zdarzeń C# jest deterministyczny dla programów z jednym gwintem?

Czy system zdarzenie C# deterministyczny dla programów pojedynczej nici? Oznacza to, że jeśli wystrzelę zdarzenia A, B i C w tej kolejności, czy będą one przetwarzane za każdym razem w tej samej kolejności?

Chcę napisać gra logiczna, która jest w dużym stopniu zależna od wydarzeń, a ważne jest, że wydarzenia są przetwarzane w dokładnie takiej kolejności, w której są one nazwie. Więc mogę używać dany układ zdarzeń, czy biblioteka jak Reactive Extensions zaspokojenia tego, czy muszę wdrożyć mój własny system obserwatora?

+2

@Lloyd Jest to w zasadzie to samo pytanie, ale to ponad 3 lat, a zaakceptowane odpowiedź mówi, że to może się zmienić w przyszłości - ma to zmienić? – Hackworth

+1

@Hackworth Czy to to samo pytanie? To pytanie ma jedno zdarzenie z kilkoma subskrybentami. Twoje pytanie wspomina wiele wydarzeń. Który to jest? Niektóre przykładowy kod pomoże wyjaśnić. –

+0

@mikez Jest to czysto hipotetyczne pytanie, żaden kod został napisany na razie. Jeśli to robi różnicę, proszę przyjąć i odpowiedzieć w najgorszym przypadku. – Hackworth

Odpowiedz

3

[programów pojedynczej nici,] jeśli ogień zdarzenia A, B i C, w tej kolejności, zostaną one przetworzone w tej samej kolejności, za każdym razem?

Tak. Wypalanie zdarzenia jest po prostu skomplikowanym sposobem wywoływania metody. Więc jest to równoznaczne z:

Na jednym wątku, jeśli zadzwonię metod A(), B() a następnie C() są one uruchamiane w takiej kolejności?

Oczywiście, że będzie.

+0

robisz dobry punkt. W jednym wątku zdarzenia są (normalnie) wywoływanymi przez użytkownika wywołaniami funkcji. Gdy użytkownik to zrobi, wywołaj tę funkcję. A testament zawsze będzie wykonywany w kolejności, w jakiej są wywoływane. Dodanie wielu wątków czyni rzeczy interesującymi .... Zdarzenia zawsze będą wykonywane w kolejności, w której są NAWIERZONE NIKTEM. jeśli dwa różne wątki ogień samo zdarzenie, będą wykonywać jednocześnie, po jednym z każdego wątku, chyba zamek/kod blokowania jest na miejscu w celu umożliwienia tylko 1 przypadek na raz. – Nevyn

Powiązane problemy