Автоматическое продвижение конечного автомата с Stateless
В последнее время я экспериментировал с Stateless (HSM в C#) ( https://code.google.com/p/stateless/) и столкнулся с чем-то, чего я не совсем уверен, как достичь.
Допустим, у меня есть следующие состояния:
Начните.
соединять
Читать
Конец
Я пытаюсь достичь: когда TCP-соединение (в состоянии Connect) установлено, перейдите в состояние Read. Или, если произошел сбой, перейдите в состояние "Завершить" (где он может вернуться в состояние "Соединение" и попытаться установить новое соединение после истечения времени ожидания).
Как я могу реализовать эту функцию автоматического продвижения с помощью Stateless, поскольку запуск триггеров из состояний может вызвать исключение переполнения стека?
ура
1 ответ
Учитывая, что я не нашел нативного решения для Stateless, чтобы делать то, что я просил, я закончил оборачивать.Fire(триггер) в задачу
Task.Start(() => _stateMachine.Fire(trigger));
Это означает, что конечный автомат не продвигает себя, как говорится, а скорее продвигается внешним источником, решая исключение SO.