2013-11-22 7 views
4

В последнее время я экспериментировал с безгражданством (HSM in C#) (https://code.google.com/p/stateless/), и я столкнулся с чем-то, что я не совсем уверен, как достичь.Автоматический продвигающийся автомат с безгражданством

Скажем, у меня есть следующие состояния:

  • Start.

  • Connect

  • Read

  • Finish

То, что я пытаюсь добиться: когда установлено соединение TCP (в состоянии Connect), перейти к Состояние чтения. Или, если это не удается, перейдите в состояние Finish (где он может вернуться в состояние Connect и попытаться установить новое соединение после периода ожидания).

Как я могу достичь этой функции автоматического продвижения, используя Stateless, поскольку триггеры запуска изнутри состояний могут вызвать исключение переполнения стека?

Приветствия

ответ

5

Учитывая, что я не нашел родное решение на Безгражданства делать то, что я просил, я заканчивал обертывание .Fire (триггер) в задаче

Task.Start(() => _stateMachine.Fire(trigger)); 

Поступая таким образом, означает, что конечный автомат не продвигается сам по себе, но он довольно продвинут внешним источником, решая исключение SO.