Можно ли создать планируемое состояние Corda, которое непрерывно планирует действия, не потребляя его каждый раз? - PullRequest
0 голосов
/ 18 марта 2020

Исходя из примера проекта пульса, я понимаю, что если вы хотите запланировать действие на некоторый интервал (например, каждые 10 минут), вам придется потреблять и создавать новое состояние с следующей запланированной деятельностью каждый раз. Это кажется ненужным, если ничего не меняется, кроме следующего запланированного действия. Есть ли способ выполнять интервальные действия без потребления состояния?

1 Ответ

1 голос
/ 20 марта 2020

Цель SchedulableState - запланировать событие для состояния в определенное время. Например, аукцион становится неактивным по истечении установленного срока, так что он прекращает прием заявок. SchedulableState особенно полезен в таких случаях использования.

SchedulableState планирует событие, событие запускает поток. Поток в основном выполняет транзакцию, которая в большинстве случаев (если вы не выполняете выдачу) потребляет состояние.

Однако, если вы хотите запланировать что-то, выполняющее SchedulableState с использованием Сервиса, как показано ниже:

@CordaService
public class SchedulerService extends SingletonSerializeAsToken {

    private AppServiceHub serviceHub;

    public SchedulerService(AppServiceHub serviceHub) {
        this.serviceHub = serviceHub;
        schedule();
    }


    private void schedule(){
        Timer timer = new Timer();
        TimerTask task = new Helper();

        timer.schedule(task, 2000, 5000);
    }

    static class Helper extends TimerTask
    {
        public static int i = 0;
        public void run()
        {
            System.out.println("Timer ran " + ++i);
        }
    }
}
...