Вы не можете точно сказать, когда власть умрет (что, если пользователь отключил машину, ничего не поделаешь). То, что вы можете сделать, это быть готовым к выходу из строя на каждом шагу.
Например, вы можете записать текущее состояние и данные приложения в файл, предназначенный для этой цели. Другой вариант - указать контрольные точки в пути выполнения, где будет сохранен частичный результат.
Для каждого решения не забудьте также записать в свое постоянное хранилище данных, если приложение завершилось нормально или нет
Все зависит от типа данных в используемых вами состояниях приложения. Хорошая новость в том, что это всегда возможно, если это достаточно важно