Не используйте init/1
для этого.Во время работы init супервизор заблокирован.Лучше сразу запустить процесс, но разрешить ему регистрироваться для таких операций только после того, как он подождет 20 секунд.Вы можете использовать простой erlang:send_after(..)
вызов в инициализации, чтобы вызвать эту задержку запуска.
Мне тоже не нравится завершение.Возможно, у вас есть закрытое состояние, в котором вы немного задержитесь до завершения.Это, возможно, может гарантировать, что никто больше не бегает, пока вы делаете.Я бы порекомендовал это, если вы контролируете, когда закрывать.Просто войдите в это состояние и затем дождитесь срабатывания таймера, как указано выше.Обратите внимание, что это решение освободит внешние ресурсы только по истечении льготного периода (файлы, таблицы ETS, сокеты) - если не будет явно освобождено.