Il existe une machine d'état avec deux transitions dans la même fonction. J'ai mis en œuvre mon code machine d'état comme ci-dessusState Machine Question
static readonly object _object = new object();
lock (_object)
{
// I want Host received the event of SMTrans01 first .
Obj.StateMachine.Send((int)MyStateMachine.EventType.SMTrans01, new object[2] { Obj, MyStateMachine.EventType.SMTrans01 });
}
lock (_object)
{
// And then I want Host received the event of SMTrans02.
Obj.StateMachine.Send((int)MyStateMachine.EventType.SMTrans02, new object[2] { Obj, MyStateMachine.EventType.SMTrans02 });
}
Je ne suis pas sûr de comprendre correctement la déclaration Lock
ou non?
J'ai besoin que les événements suivent le bon ordre (l'hôte a d'abord reçu SMTrans01, puis l'hôte a reçu l'événement SMTrans02). Après le test, j'ai trouvé que l'hôte recevra d'abord l'événement SMTrans02 en premier. On dirait que la déclaration Lock
ne fonctionne pas. Je ne sais pas pourquoi.
Y a-t-il de bonnes méthodes pour l'aborder?
Pour le verrouillage, je n'utiliserais pas d'objet statique - ou avez-vous vraiment besoin d'un verrou sur toutes les instances de votre objet? Je considérerais autrement de passer à un vrai singleton à la place et travaillerais toujours sans verrou statique. – weismat
@weismat. Je veux juste contrôler mes événements pour suivre le bon ordre. Je n'ai pas vraiment besoin de 'Lock'. Je suppose que je n'ai pas besoin d'utiliser 'lock' en fait. Mais je ne trouve pas d'autre solution. Je vous remercie. –