Цитата Сообщение от Владимир Ситников Посмотреть сообщение
Тут более важен сам подход: пишем код в синхронном стиле, а оно само разворачивает в автомат.
вопрос кто это будет разворачивать, кому доверять, как КДС будет анализировать

Код:
ILE true DO
  CASE state OF (* и этот case тоже создал компилятор *)
  0:
		res:=OwenFileOpenAsync(stFileName, stMode, returnvalue);
		IF res = ASYNC_WORKING THEN
			state := 0; (* CONTINUE -- значит новое состояние это "начало цикла" -- т.е. 0 *)
			RETURN; (* !! вернуть управление *)
		END_IF;
(* state=1 используется из одного места -- можно не создавать отдельную case ветку *)
		IF res<>ASYNC_DONE THEN (* это ошмёток UNTIL res<>ASYNC_DONE *)
			state := 0;
		ELSE
			state := 2;
		END_IF;
  2:
		RETURN;
  END_CASE;
кода еще не было когда я написал пост, "По-моему, я весьма подробно описал почему код не зависнет. Нет?" если ни WORKING ни DONE state становиться равной двум вероятность этого огромна, мне такая ПАУЗА не нужна, лучше по старинке, что то ручками написать